April 19 88
Vol 1-3
TS2068 UP DATE
the user's NEWS
A C|uar|e rl Y Maaazi ne
New Sections
COMPUTING WITH LARKEN DISK *****
***** THE DISK DRIVE ORPHANAGE *****
The Millenia K
The TOS DISK
********************************** *****^**** *******************
***** Major Softwares This Issue *****
** Feature Program: "BUDGET" by: Bob Mitchell
** Five New Disk Managers by: Bob Hartung
**:
: ***
*** p L U S ***
Umteen articles on programming.
TS-2068 UP-DATE
1317 Stratford Ave, Panama City, FL 32404
904 871 4513
5 E
c ^
■ j— c/;
o; ^
Ms
I i ll
•o ^ — '
<b c x: „>;
^ i2 h
c c
<U C O ?3
C £f ^ 2
t u •
3
CI.
£
o
00 ^
OS »-
7^ OC
> sz sz *-
r- 's; o
^ y^. IZ
= C _2 ,
^ 3 5
^ ^ J
b£ S
be t1
x:
E
H '3 ^
ill
a r5
"2 ^ y
♦J C Q
3C ^ c
X ^ ^
N E
'i ^ l
,^ ^ R a. o
— c —
a <
CQ w
CO 5
11
^ E
x 3 £
> j-
^ ^ '~>
u ^ =: £
$ ^ :2 B f i
00
J<
1 1 J ^ ^
I i s Cut
^ E a, 5 'J
5 Hu)
i2 S OC
= :^ O <
c > 3 afjOti
t Ci. £ x: -
g ^ S ,^
^
5 ?c ^ i^i
3 S^J I-
I o<i'2 S is 5 s-
c
03
J CO , ' 00 OX) (U _^
- O CL. D. g
5 C £ H ^
^ ^ xT S .E & o
£
w c c -^
^ e ±
>
o
s
^ E
o ^
00
«^ c
c -5
^ -s s 8 1
=5 3 - ^
^ C c *^ <u
rt: 53 -iS x: 5b .
03
C
o
p g s
c-!2 O
-£ E
^ 00
o
03 O
O |-
CO (U
^ c
C (U
CO ■•-»
a> .t;
x:
H
c3 ctl
, , -- c ^
a, cu c
o D O c«
So O 3
(1^ *-*
T3 ^
cd ^
2^ o „
S 9 ■
(D ^ ;
2 -
.S 00 ^
> x: <u
c/5 3
<u O •Y
X)
53 o-
CO a.
bO
_C
(/)
o 3
V3 CO
c ^
O J=
II
a c
03 §
c ^
't> ^
OQ
I
3
re?
o a-
00 «
52 «
^ =:
3 CO
x: 3
o E
o ^
c «^
d)
(U
V)
C3
..E ^
^ 1— (D fli
00 <U I-
•= Si
O
x:
c
o
- o
ii 1
o 2
00 '
E
o
o
>-,00
U 00
|N
O
•a S
is
03 c^3
u O
3
^ S
2 < 2
.£
X) 03
< o
r ^ c
II
-g X)
CO .ti x;
X -u >
<L) 03 >
o ^
CO x:
cux> c/5
w r3 w
CO c/)
X) > ^
>^ u<
^ 0^ O
— X) ^
> 3
O
X)
>-. .
!U on
cr-o
o ^
■O 03
C
c«
cu x:
f ^ £
~ x:
3 x:
cj O
3 x:
c/2 5 03
03 2 UU
P. ^ Q
03 ^ "5
S ^ .£
3
X 00
(D 03
■£ B
vhL cO
O (yj
B ■>
CJ .
x: U
S ^ c .
x: -x:
OC
CO
c <u w
o "o 2
•5 00 o
O C
X)
C -r c
— ^ O
V3 p <D
CO O- o
a I ^
^ <SJ
>
O
D,
T3
C
03 ^
00 3
C O
4) 03
O On
2 X
CO 00
(J o
OJQ 03
= £
U CO CO
.£ ^ c
:= §•
B c ^
(U 3 3
T3 CO O
3 ^
^
O £ 3
x: E o
•§ 00 o
> 00 j=
52 N ^
c x:
.2 ^ .y
(/I 03 '
-S
^ OJ O £
£ GO
^ ^-S S
.£ 00 CO 2-
lo £ >^ ^
'■5 <u ^
t/3 > O
Op w x: ^
O c«
B- ^
E <u 2 <^
P <u 2 >^
O .1= ^ ?^
0 "O
Edi torial
April 1988
The Changing Conpiexion of T I MEX- S 1 NC L A I R Computing
Seen at the Orlando 1988 Winter Fest
This issue of Up-Date was delayed a week to
report upon the Orlando 1988 Winter Fest, There
were quite a few subscribers to UP-DATE In
attendance and several attendees became new
subscribers. From my standpoint the Fest was a
success. The display room was filled most of the
time. Most area user groups were represented. The
C,A,T,S, group was busy taking orders for their
TS-2068 public domain software assemblage on tape,
($9.00 to C.A.T,S,, PO Box 467 Fairfax, VA 22039),
Representing the Western USA was Tim and Stephanie
Woods (Time Designs Magazine), and the Central USA
was represented by the staff of SyncWare News and
attendees from the Michigan user group.
The rains came but the spirit of the fest was
not dampened. Then Sunday afternoon the Sun came
out for those who wanted to visit Disney World and
the other attractions. A lot of merchandise was
sold by the vendors. A+ Computers came prepared to
sell out their stock of QL»s and began selling the
QL for $75.00 (Including software!). Then by
Saturday afternoon the price went up to $89.00 In
order to keep from being sold out too early. Sharps
Inc. had the table next to A+ and was doing a land
office business In QL accessories and books. The
strangest phenonemon was to see a person buy a QL
for $75,00 and then turn to Sharps to buy a Trump
Card for $300,00! It just "sounds" strange as the
Trump contains more than the equlllvant of $800,00
of IBM XT enhancements. Including up-grade to 896K
of memory.
The TS-2068 tables were also doing brisk
business and alnrxDst everything sold out. Displays
were set up to demonstrate all of the TS-2068 Disk
Drive systems and Larken»s new 256K Ram Disk
Cartridge, Eric Johnson sold a bunch of new TS-2068
computers obtained from the TImex repair facllllty.
He also sold quite a few that had faults of one kind
or another. All of the TS-2068»s did not sell out,
so If you need one, contact Eric at the address
given later in this article. Available are
TS-2068 *s that have been checked out good and some
that have bugs. I believe that the prices are about
$75,00 for the O.K. ones and $35,00 for the ones
that have flaws.
Bill Pederson showed his (prototype) 20 Mbt
EXTRA MEMORY Bank Switching RAM for the TS-2068
(thats 20 mega bytes!). Hopefully sufficient
interest will develop that Bill will develop the
system and offer It to the users. (William
Pederson, 1120 Merrlfleld S.E., Grand Rapids, Ml
49507).
T I MEX S I NCL A I R GROUP EXPAND I NG ! The comp I ex I on
of the Timex Sinclair user group has changed during
the past year. We have had an Influx of 5-8000 new
Sinclair QL users, while keeping constant numbers of
TS-2068 users. Of course the TS-1000 and 1500 users
are a solid group who mostly have complete software
libraries. Interest remains strong In the TS-2068
due largely to the availability of three new disk
drive systems for the TS-2068 and some new and more
capable software, (See reviews of three TS-2068
Disk Drive systems In the January 88 issue of
TS-2068 UP-DATE Magazine).
THE SINCLAIR Z88: Hold your hats! Here comes
the neatest I Ittle PORTABLE computer that the world
has seen! One was aval lable at the Time Designs
table to stroke and examine. Forget any comparison
with other Sinclair products. This is New Concepts.
The Z88 Is a TRUE PORTABLE requiring no extra
devices or dangling wires. It operates for 35 hours
on enclosed AA Cell Batteries, holds memory data non
volatile practically forever, has a pop up LED
display, and Built In software. When the switch is
turned on a pop-up Menu appears for the built In
software ensemble. The Z88 has a built In EPROM
programmer and one can pop in a small cartridge to
down load the existing program to EPROM, Then the
EPROM cartridge can later be plugged In and
operated.
The Sinclair Z88 Is a business person's delight
and a sales person's dream. Also, I believe that
many personal users will want this neat little
computer. The dealerships in the USA are being
organized and a few dealers have the Z88, Once the
Z88 hits the USA market in full force, I believe it
will capture a large chunk of the market for
PORTABLE Lap Top computers. The SI ncl al r Z88 wl 1 1
fly! The price of the Z88 is about $479.00. It»s
nearest competitor runs about twice that. My
opinion Is that we will see the Z88 price lowered to
just under $400.00 as the year progresses, which
will cause Intolerable pain to competing Portables
and lap tops, which are grossly overpriced. There
Is room In the USA market for the Sinclair Z88.
With 5-8000 new QL users, the continuing
TS-2068 "die hard" users who are now upgrading to
Disk Drive, and the (just now) release of the
Sinclair Z88, the Timex Sinclair user group Is
actually expanding. The convertabi I Ity of syntax
between the TS-2068 and the older TS-1000»s helps to
sustain the durability of the TS-1000 group. While
some suppliers have abandoned the Timex SI ncl al r
users others have Increased their stock and
Intensified their efforts. As new Z88 and QL
dealers come In the support picture should Improve,
2
Edi torial
April 1988
The TS-2068 users contt nue to have excel I ent
cottage Industry support and new software Is
constantly being produced. The clubs are busy In
the conversion of public domain software to disk
drive application and expanding the software
functions of these abbreviated programs.
Interestingly, about 1/4 of the "die hard" TS-2068
users also have a QL, Some have said that they are
building their QL system In affordable stages while
keeping the TS-2068 as their primary system.
"THE NORTH AMERICAN TIMEX SINCLAIR
ASSOCIATION": The Florida User Groups, who
organized Winter Fest, came to Orlando with a plan
to organize a National TImex Sinclair Association.
Quickly "National" changed to "North American" a
more appropriate name which Includes the Canadian
user groups, in particular the Ontario and
Vancouver user groups are very active and strong. A
North American Association will continue (In name)
the friendly, cooperative, and common Interest
"existing situation". The Idea of a North American
Association imedlately took hold, A working group
was established. Both Time Designs Magazine and
TS-2068 UP-DATE Magazine volenteered to support the
association with editorials and page space for
communi cations.
The success of the North American Association
Is almost guaranteed from the start. Eventually as
the Association Is formed a new Association
publication Is likely to be started. The names of
the other coordinating officials will be announced.
But as of now, Eric and Mary Lynn Johnson, 249 N,
Harden Ave., Orange City, FL 32763, are the key
persons. The two had major parts In organizing the
Orlando Winter Fest, TS-2068 UP-DATE Magazine
highly recommends that ALL TImex Sinclair users Join
the new North American TImex Sinclair Assocatlon and
participate In this venture that will serve to
promote the Interests of the users, the Clubs, the
suppliers, and provide Information exchange,
Eric Johnson Is the SYSOP of the BBS which was
set up as the communications center for the Fest,
This BBS will be continued and will become the
communications center for Information, suggestions,
and volenteers for work In the organization of the
North American TImex Sinclair Association, The BBS
telephone number Is: 904 775 0093 (300 baud, 8, 1,
none). Lately this BBS has been sabotaged by a
pestering hacker, but will be back on line WHQ (when
he quits). Keep on trying. Whether you can reach
the BBS or not, your Interest cards to the persons
given will be a hel p,
IN SUMMARY: The Orlando Winter Fest was a
success, TImex Sinclair Computing, Instead of
waning, is actually on a sharp up-swing. There are
several thousand new QL users and another Sinclair
Z88 user group Is about to come Into the fold. The
Z88 group has the prospect of becomming a huge user
group. New disk drive hardware and software for the
TS-2068 are now available, which adds to the
"staying power" of this viable and enthusiastic
group. The new Association will bring more
communications between Clubs, the users at large,
and the supporting Industries, With the enthusiasm
being exhibited for the QL by the users, Amstrad may
be enticed to resume production of the Sinclair QL,
They will miss a great opportunity If they dont.
System Variables and Number Storage
Appendix D of the TS-2068 user manual gives
four pages of "System Variables", which most users
klnda Ignore, These variables are used by the
TS-2068 operating system to control things, and we
users can use the vars to advantage. The most
confusing thing about the tables Is the "two byte
numbers", which leaves us out In the cold climate of
mls-comprehenslon. So, let us learn how to store a
number greater than 255. A "8 bit" computer places
a limit upon "how large a number" It can manage "In
Just one byte (memory address)" In memory. You can
"LET a=999999" and the six digit number will STORE
In the variable area. But, Internally In the
computer, that takes several bytes of memory. The
minimum amount of memory required to store a number
larger than 255 Is two bytes, and Is stored by
POKE(lng) a smaller number to two consecutive
addresses, EXAMPLE: POKE 60000,1 and POKE 60001,1,
Now let us see what that means. In so far as "what
number LARGER than 255" has been stored. The
computer formula for finding out would be, PRINT
PEEK 60000 + 256 * PEEK 60001, Try It, After some
practice POKING two consecutive MEMORY ADDRESSES,
and then PEEKING them back with the formula, you
will find that resultant of each Increase In a
number poked to the HIGH address will be 256 digits
higher, and the resultant of each Increase in a
number poked to the LOW address will be ONE digit
higher.
The actual reason that a 8 bit computer can
only STORE a number SMALLER than 256 In ONE memory
address Is that there are only 16 "address lines" to
the Central Processing Unit (CPU), What is the
MAXIMUM factor of 16? You are correct If you said
"256", "But, you said that the computer Is limited
to the maximum number 255 In one memory address"??
That is correct, because 255 actually represents 256
digits, INCLUDING ZERO, Count on your pinkies. One
finger Is 1, but a closed fist Is 0, In computing,
zero has as much significance as 1000, Elementary,
eh Watson? Now what Is the HIGHEST number that can
be stored in TWO memory addresses? Find out by
POKING 255 to two addresses and using the formula.
Never did get to them SYSTEM VARIABLES, did wel We
will deal with them In the programming section.
3
Whither Goest, TS-2068 UP-DATE?
This April issue of UP-DATE marks the
third of a four issue year, and a time for a
decision for the second year. I am having fun
publishing UP-DATE and learning a bit with each
issue. But it is a lot of work i I hope that
you like what is being done because it has cost
me about $160.00 more per issue than gross
income. The fun part isn't quite worth the
$53.00 per month loss which could be buying a
new Z88. So, I'll have to quit (nasty word) or
increase the price of UP-DATE subscription to
about $15.00 per year to break even. I thought
about cutting the page count to about 16 pages,
but I dont like little newsletter size
publications. Do you? I had much rather
INCREASE page count than to decrease the
content. By the way, I just subscribed to
Quantum Levels, a smaller magazine with a
higher subscription cost. It will be worth it.
So, UP-DATE will continue with a increase
in subscription price to $15.00. I hope that
you dont begrudge me a break even. I'll try to
add enough improvements to make up for the
extra three bucks. UP-DATE will concentrate
upon broadening the coverage of these topics:
Public domain software- I have begun to
assemble a library of PD programs and will cull
out the dogs and publish only the programs that
have been checked out, with edited changes for
disk syntax (lotsa worki). We need to have
more information about ROM ROUTINES that can be
"called from BASIC". ROM BUGS in the bank
switching functions must be explored.
Telecomputing needs further detail. I am
looking for a program to use "between persons"
so that you can call someone else and the two
of you begin exchange of data and programs
without having to go through a BBS.
Other topics to explore are: Building
projects. Right now we need a BUSS extension
that has a 5V power supply to power external
devices. Many of us are loading down the 5V
supply with too many add-ons. Other building
projects are needed. Then "interfacing" is a
broad subject that has not been the subject of
much writing. How about the idea of using your
old TS-=1000's as slave devices to do processing
while you are doing something else with the
TS-2 068? More information needs to be
published about how to program EPROMS to use in
Dock Bank cartridges. And, of course, we must
continue to cover all of our disk systems and
bring on more DISK software. Patching up old
cassette programs is like bear hunting with a
BB gun. UP-DATE invites writers to assist in
these areas.
QL Support
An analysis of TS-2068 users reveal that
about 1/4 already own a Sinclair QL, and more
will purchase the QL if the supply lasts.
UP-DATE will not dilute the support of TS-2068
users at all, but will begin to cover the QL in
the October 88 issue. Actually more than 1/4
of the subscribers have both TS-2068 and QL
computers and are using the more familiar
TS-2068 as their primary system as their QL
learning curve progresses and as they build up
their QL systems. Coverage of the QL will be
secondary and may either stay that way or
increase as the subscriber base demands. While
no date is set, sometime in the future UP-DATE
will look at the numbers and perhaps begin
covering the Sinclair Z88. If the Z88 is a^
Editorial
April 19 88
hot as I think it may be, and the price comes
down under $400.00, many of us will be getting
one and will want publication support.
Even before starting UP-DATE I was always
interested in reading about the Spectrum and
the QL, though I did not own either. Now I
want to know more about the Z88 and how it is
accepted. I believe that most UP-DATE readers
will be interested in such articles. Who knows
when the Zapper will get your TS-2068 and force
you to change? We wont quit (nasty word) then,
will we? Anticipating such time your scribe
bought a QL at the Orlando Fest. My wife
thinks I'm crazy, and with good reason as I
have 4 TS-lOOO's, 3 TS-2068's, a TS-1500, a
C-128 (ugh), and an old Heath. Maybe it's my
background from an old manufacturing family
that made machine screws for over a century.
There were always too many loose screws and a
few nuts in the family. Just imagine someone
trying to settle the estate of a machine screw
and orphan computer collector!
Speaking of the QL, Bill Fisher, 419
Parkwood Drive E, Orange Park, FL 32073 is
about to start a new QL publication called "QL
USA". So, UP-DATE' s coverage of the QL will be
laid back, serious stuff and tips for
programming from our experienced QL users.
Programs for the QL on disk will be offered
from time to time (Issue Disks), which brings
up a point. TS-2 068 issue disks have been
selling pretty good, but to the same group. It
seems that once a person buys one he is hooked
and wants the next disk. Each disk contains at
least one long program and several utilities.
Normally the one long program would sell for
about $19.95. For $16.00 the issue disk is a
bargain. AND, if anyone isn't satisfied--
money back! "Mail Merge" (Oct Issue Disk) is
the best program of it's type that I've used.
"DOSDEX" (Jan issue) is even better.
FD-68 and LARKEN SUPPORT
I apoligize to the FD-68 and Larken Disk
users for being broken down in support. My
TS-2068 + FD-68 + LKDOS Cartridge, ALL zapped
togetherl Dan Elliott fixed the 68, but the
other peices took a slow boat to China and
haven't been returned. I WILL get back into
FD-68 and Larken disk support even if I have to
buy new controllers. Now WHY did all of that
break at the same time? Dan Elliott said that
the voltage reg fried, placing 6+ volts
throghout the Vcc line. Several memory chips
fried. This makes me believe that there was
too much tagged on to the external bus. In
addition, I had the Parallel printer intfc, and
the ZSI/0 RS-232 interface on there. From now
on I will try to keep only the essential items
on the rear deck port. Dan's address is: Dan
Elliott, RT-1, Box 117, Cabool, MO 65689.
$15.00 plus parts for TS-2068.
Help me Format this Magazinel
Now it is YOUR decision time. I am
fiddling with the print format of UP-DATE to
try to find a more readable arrangement.
Please compare the first type font and size
with this page. The older presentation was 15
point type font with compressed spacing between
characters, 52 characters per line and 56 lines
per page. A page provided 582 4 characters.
This format is about 16 point type, 47
characters per line, 78 lines per page, with
normal spacing between characters and between
lines, but with smaller type. This combination
produces 7332 characters per page, 1508 more
than the other format, or a 26% increase in
page data. I'll mix up the format of this
issue to let you decide between the styles.
I just got my glasses up-dated and I like
this style better because the characters in the
words are better spaced. But some of you may
be straining to focus in the smaller print. If
UP-DATE is printed in this style, 30 pages will
contain about the amount of data in 38 pages of
the other style. If we go to this style,
listings will be in larger print and 32 chr
lines. The way this new style is achieved is;
I use 10 pt Pica on a legal size page and then
reduce it to 76% for the masters. What I*m
trying to do is to increase the content of
UP-DATE and stay within 30 pages, and improve
readability at the same time. You are invited
to drop Up-Date a card and give your
preference. Elaborate if you wish, or just say
"New Style or OLD Style".
Keeping UP with Sir Cleave
Sir Cleave, that intrepreneur designer of
computers, wrist watch TV's, steam powered
aircraft, and hair growing lotion, recently
spent five hours in a hospital in Spain where
he personally directed the world's first
implant of supplementary memory into a human
brain, his own. He directed the precise
operation while viewing the area of surgery via
prisms and mirrors. 256 gbts (giga bytes) of
non volatile protein memory cells were
implanted along with a enzyme that he invented
for bonding artificial protein cells to the
natural cells of the brain. Departing from his
normal habits. Sir Cleave 's new system does not
require additions to its I/O port to operate.
Upon emerging from surgery. Sir Cleave struck
up a conversation in Cantonese with a visiting
intern from China.
Later Sir Cleave said that all of the
World's languages and dialects were
pre-programmed before implant. But he admitted
to having tongue flutter when practicing
changing from the dialect of the New Guinea
natives to that of one Eskimo tribe of northern
Manitoba. He said that this particular Eskimo
dialect, to be spoken correctly, requires the
speaker to be on the verge of shivvering, and
the terapertures in Spain is not that cold.
Never the less, it appears that periphreal
devices will be needed after all to correct
some ROM bugs already found. The trouble is,
Sir Cleave has locked himself into a strange
situation (for him). He cannot easily abandon
this project. (April Fool!)
TS-2068 Publication Support
There are some excellent small
publications that are worthy of a look. Send
$2.0 0 to any of these to get a sample issue.
Then you can decide whether or not to
subscribe. QZX Magazine is oriented toward
Amateur radio operators who use Sinclair
computers (2 025 O'Donnell Drive, Las Cruces, NM
88001). CATS Newsletter, published by the CATS
group, is a good club newsletter (PO Box 467,
Fairfax Station, VA 22039). QL USA is a new QL
Newsletter (419 Parkwood Dr. E. , Orange Park,
FL 32073). D-FW Data Expansion is a good
newsletter published by the Dallas / Fort Worth
user group (4 424 Geddes Ave, Fort Worth, TX
76107).. ZX Appeal, a newsletter published by
the Vancouver Club (2006 Highview Place, Port
Moody, BC, Canada V3H 1N5).
SINCUS NEWS, published by the New York
group (1229 Rhodes Rd. , Johnson City, NY
13790). DATSN is a newsletter published by the
Detroit user group (PO Box 614, Warren MI
48090). The Plotter, is published by the
CCAT/S group in Oregon (1419 1/2 Street, Oregon
City, OR 97045). TIMELINEZ, by the San
Francisco area group (6615 Clifford Drive,
Cupertino, CA 95014). SMUG BYTES is by the
Milwaukee group (SMUG, PO Box 101, Butler, WI
53004). LISTing is the Long Island New York
group newsletter (5 Peri Lane, Valley Stream,
NY 11581). FDD Newsletter, 43307 Chambers
Road, Horseheads, NY 14845, is Aerco FD-68 and
CP/M orientatd, by Ron Havlen. SINC LINK is a
good newsletter by the Ontario User Group, PO
Box 7274, Stn. A, Toronto, Canada M5W 1X9.
TS-2068 Cottage Software Support
Fairware, Jack Dohany, 390 Rutherford
Ave., Redwood City, CA 94061. Jack is a
subscriber. Jack's cottage software business,
has a catalog of various useful software
titles. To get the catalog send $1.00 to Jack.
Now WAIT I Should a catalog be free? It costs
to answer correspondance and send free stuffin
and our suppliers are operating on a low
budget. You'll save the buck on your first
order. Other software suppliers are: Chia-
Chi Chao, 73 Sullivan Drive, Morago, CA 94556:
RMG Enterpizes, 1419 1/2 7th St., Oregon City,
OR 97045: S & K Enterprizes, 2107 SE 155th,
Portland, OR 97223.
Some larger Cottage industries supporting
the TS-2068 are: Lempke Software 2144 White
Oak, Wichita, KS 67207: BYTE POWER, 1748
Meadowview Ave, Pickering, Ontario LIV 3G8 :
John Mathewson, 1852 Appleford St., Gloucester,
Ontario K1J-6T8. One last mention for this
issue: Grey & Clifford, PO Box 2186,
Inglewood, CA 90305 kinda specializes in
Telecom hardware and software. I killed my
wallet with them, buying a Modem, Specterm 64,
ZSI/0, and I'm just now getting well. UP-DATE
endorses all of these suppliers as honest
dealers who stand behind everything they sell.
All of the larger dealers will keep you on
their mailing list if you order something each
year. But you will be glad if you try the
smaller ones also.
I had an interesting talk at the Fest with
Bill Pederson, the engineer who designed the
electronics flight control system for the F4
Phantom aircraft. Bill probably has the most
knowledge of any person about the SYSCON
managemnt area of the TS-2068, which is the
Memory Bank Switching routines. I have invited
Bill to do a complete series of articles for
UP-DATE about using extra memory, and to
include some building projects. One of his
prototype boards contains the extra 5V power
supply (mentioned earlier) to power external
devices. And he has external devices! How
about 20 megabytes of extra RAM, and a
re-designed control system for the extra
memory! I'd settle for less, but better
management without ROM bugs. See you in the
pages.
Programming
April 1988
BUDGET
BY: Bob Mitchell, Miliodale, Ontario
Provided fo TS-2068 UP-DATE Magazine
(Revision dated 880229)
Editor's Note: Bob Mitchell Is retired
from two professions, a career In the Canadian
Armed Forces, and a subsequent career In
Geodetic Survey. Presently Bob lives In
beautiful Ontario Canada and "Snow Birds It" to
Florida during the Winter months. Bob has
worked on and purified this major software over
a period of about six years, and now gives us
this outstanding software which represents
countless hundreds of hours of work. It Is a
masterpiece.
I never anticipated publishing such a long
key In project In the pages of UP-DATE, and I
would not except for these strong factors: 1.
Though many, the program lines are short and
easy to key In. 2. "Budget" rates a 10 In the
category of usefulness. 3. Budget rates another
10 for educational value In two areas: a. Basic
Programming techniques. b. It Is a excellent
tool for learning to compi I e bas I c programs.
Finally, 4. Budget Is easily used with all disk
drives systems, as well as cassette. The
program Itself has great possibilities for
re-ded I cation to other applications besides Its
purpose as a Budget software. The spreadsheat
data Is presented In excellent format and the
subject categories can be changed to track other
topic areas. This BUDGET software Is a real
barn burner worth the hours It will take to key
In the progam lines. And there are great
follow-on things to come.
Because the program listing Is long,
UP-DATE provides a short appendix at the end of
the text to help with the key- In project. Take
your time and do the key In over a time period
of at least a week, saving the partially
completed program often. It will be fun and
relaxing that way. While keying In, ponder the
program syntax and try using direct commands to
see what the syntax actual I y does. UP-DATE will
take questions and publish explanations In the
Issues to come. If the key In seems tedious.
Just remeber. Bob has worked on this sofware off
and on for six years, and we get It all In a
neatly packaged gift. Now Mil turn you over to
Bob to get you going.
BUDGET: Purpose and Scope
This BUDGET program Is In three parts.
First the long program In BASIC Is given. When
the listing Is keyed In the program will work
right away by RUN. BUDGET Is really a Spread
Sheet software that has the purpose of planning
a annual household budget and then tracking the
expenditures, providing various corrparlsons, and
displaying or printing the data. The
Information products may be printed out with the
TS-2040 printer. Follow on parts of the program
will be given to allow print out of the data
products with Centronics printers.
The second part of the BUDGET program, to
be given In the July Issue of UP-DATE, Is a
customized Disk Drive "Loader/Manager", This
Loader program Is not essential for operating
the Basic program given In this Issue and thus
will be given In a follow on article. The
Loader program customizes the Compiled Basic
program to operate with disk drive. There will
be versions for Ollger Disk, Larken Disk, and
syntax changes for Aerco FD-68, RAMEX, and TOS
Disk. One more program addition will be given
to provide the spreadsheet print out with wide
carriage printers. The Basic program given In
this Issue prints a 32 column product with the
TS-2040 printer and with Ollger disk via the
LET/p=o feature.
This Issue deals with the ma I n software
titled: "budget. BJ", which Is programmed
entirely In BASIC. But, there Is a unique
feature. The program Is set up for COMPILING
Into Machine code by use of the Compiler program
"TImechlne". So, you will see the strange
syntax "REM 1" Installed Just after the line
number of some program lines. This is the
syntax needed by TImechlne for transforming the
Bas I c Prog ram I nto a Comp 1 1 ed Mach l ne Code
program. If you We never done this, dont worry
about It because the program w 1 1 1 run without
compiling It, Just slower. Then after you have
the program running will be the time to begin
the adventure of CompI ling the Basic Program.
So, go ahead and type In the long listing. Save
the program often to either Cassette or disk.
When finished, then pick up the operational
procedures given next.
15
6
PROGRAM OPERATIONS
U Type RUN to begin operations. When the
BUDGET menu appears In a sort of pull-down menu
format, follow the Instructions on the screen
and SET DATE (In International format: YYMMDD)
and then SET BUDGET YEAR (Just YY).
2, Try entering some amounts Into the
program. Move the cursor to »»ENTER PLANNED" and
press ENTER, Follow the prompts on the screen
and enter some dummy planned data (le, how much
you plan to spend during the 12 months for each
of 18 categories. When you complete this dummy
run of the annual budget, It will be time to see
the results In various formats,
3, In sequence, press: DISPLAY SUB MENU >
PLANNED > JANUARY, (In this tutorial,
sequential key presses are separated by a ">",)
Prompts at the bottom of the PLANNED BUDGET FOR
JAN-APR gives three choices:
a. Continue with Display Mode,
b. GO TO the Main Menu,
c. Copy the Spreadsheet to the 2040
printer. If your printer Is not on the program
will detect this and tell you to turn It on,
then the COPY routine will work,
4, Try a few comrrtands then go to the Main
Menu, If there Is an error, such as "number too
big" (you wont see this report In the compiled
program); you will be back In the loader,
(Note: Since we do not yet have the LOADER
program, type GO TO 1470^ when any stoppage
occurs).
Main Program Features
5, Let's go over some of the main features
of this program. First, the line of BASIC that
you will want to customize Is 590, Edit this
line down to the bottom of the screen and change
It manually according to the folowlng criteria.
6, There are 18 categories and you should
set the names carefully to meet your needs over
several years, (There Is space for up to 10
letters In each of the category names,) If you
change the category names from year to year, you
will find It difficult If not Impossible to make
meaningful comparisons for budget planning,
7, Try entering some "actuals", I e,
expenditures. Set the exchange rate If you are
dealing with foreign currency. Just enter the
proper rate. Enter "1" for local currency.
Press JANUARY > GROCERIES and a "worksheet"
appears to allow you to enter all of your bills.
You can concatenate several entries In each
category by entering them at the same time (eg,
134.35 + 27,09 + 48,76), Press "Y" for more
entries until you have all of your bills for
JANUARY entered and then press "N", The
totaling then takes place and Is slow In
comparison with the compiled version,
8, Now Inspect what you have done via the
DISPLAY MENU, Notice that all data are right
justified and all are rounded to the nearest
whole number, no room for pennies! (The right
Justification routine slows the BASIC version
down and Is one reason for providing the set up
for oomplllng, ), Your data will be stored In
decimal (Floating Point) notation even though It
Is rounded to the nearest whole number for
screen display and for printing with the TS-2040
printer. Storage In floating point Is essential
so that the calculations performed by the
program will produce accurate results, totals,
etc. Rounded whole numbers are acceptable for
budget display, planning, and tracking,
9, The ADD-ON programs will be given In the
July Issue of UP-DATE, One addition will
retrieve the real values and print them on a
wide printer In full decimal format. Another
will be the Loader which Is the Disk Manager,
I'll also provide a more detailed explanation of
the BASIC program with emphasis on the parts
with useful sub routines. Also there will be a
HELP routine which you can put on disk and call
up from an expanded loader: this "HELP" will
give suggestions on allocating different types
of expenditures to the 18 categories,
10, Try COMPOSITE for January Actuals. You
will get a YEAR-TO-DATE (YTD) comparison with
variances and planned Year-End Totals, The
7
variances show the differences between the
corresponding planned and actual values. If you
have spent more than your budgeted amount, the
variances will be negative values, and these
will be shown In flashing figures (In RED on a
colour screen).
11. Take a look at CATEGORIES, Then try
GRAPHS > BAR GRAPH > ACTUALS > JANUARY >. Try
the table option and you will get a YTD percent
table showing the percentage for each category
agal nst the tota I • The percentage tota I w 1 1 1
seldom add up to exactly 100^ (due to rounding).
12. Get back to GRAPHICS via the MENU and
try the pie chart. Sometimes, depending upon
how close the pie segments are, the category
codes (A-R) will overwrite one another on the
pie chart. I left this that way so that I could
keep the pie chart as large as possible.
Another view of the data Is shown when you call
for BAR charts.
13. Now BREAK and make a direct SAVE of the
BASIC program to Disk or Cassette. SAVE with a
starting line of 147Q, The program, when
re-loaded will present the main menu and the
previously constructed data will be intact for
either review or for entry of new data to
continue planning and tracking of the annual
budget.
Coming Additional Features of BUDGET
Next Issue will bring the ancillary
programs previously mentioned, plus the
procedure for COMPILING the Basic program using
the TIMECHINE^ Compiler program. This
application of Tlmechlne represents a case of
putting the compiler through Its paces. If you
dont yet have the "Up-Dated version of
TIMECHINE, It Is available from several sources
Including: NOVELSOFT, 106 Seventh St., Toronto,
Ontario, Canada M8V 3B4 ($19.95 US plus $3.00
S&H).. Be sure to specify "The AMENDED VERSION
that handles D and E routines". This excellent
compiler allows you to compile almost any slower
Basic program Into compiled machine code to
greatly Improve operating speed.
Editors Note: To get the advantage of
having a faster operating program that has been
compiled with Tlmechlne, you have two options:
1. Buy the Tlmechlne software and use It to
compile this program. This Is the "educational
way". 2. The April UP-DATE Issue Disk wl 1 1
contain ALL programs mentioned (The BASIC
un-compi led program, plus the compiled program,
plus the additions, "Loader and Centronics
Printer annex". See the yellow pages for
ordering.
Bob Mitchell, Wlllodale, Ontario
UP-DATE Appendix to BUDGET
There are several program I Ines that start with
< REM ! >. This Is the syntax for the Tlmechlne
(Compiler program which does not Interfere when you
run the program In Its BASIC form. Dg enter these
codes whether you Intend to compi le the program or
not. This Is so that the TYPE IN CHECK POINTS given
next will be correct. To enter the REM ! syntax,
"first omit the REM !" and type the rest of the line
of programming. Then back up the cursor to the line
number and type REM !.
KEY IN Accuracy Check
Accuracy check points are given as follows:
After keying In the lines given In the left column,
type CLEAR, then PRINT FREE. If your typing Is
correct the figure In the right column will be
presented on screen. If the screen figure and the
number given In the column do not match, then there
are type In errors.
LINE FREE
LINE
FREE
LINE
FREE
LINE
FREE
100-38385
1500-
-33346
2900-
-29260
4300-
-25601
200-38163
1600-
-32926
3000-
-29081
4400-
-25305
300-37896
1700-
-32621
3100-
-28820
4500-
-25025
400-37601
1800-
-32353
3200-
-28612
4600-
-24434
500-37328
1900-
-32145
3300-
-28415
4700-
-24150
600-36641
2000-
-31840
3400-
-38086
4800-
-23616
700-35988
2100-
-31620
3500-
-27836
4900-
-23132
800-35362
2200-
-31316
3600-
-27460
5000-
-22820
900-34823
2300-
-31133
3700-
-27264
5100-22327
1000-34580
2400-
-30672
3800-
-27039
5200-
-21854
1100-34622
2500-
-30369
3900-
-26723
5300-
-21343
1200-34041
2600-
-30124
4000-
-26322
5400-
-21143
1300-33821
2700-
-29793
4100-
-26051
1400-33625
2800-
-29574
4200-
-25773
Last llne-5420=21093
8
17.
"budget. BJ»' Bob Mitchell
10 REM **Change DATA line 590
—Category Names —
to suit your own
needs**
20
30 REM !USR 32000
40 REM IINT +g,cf ,cf2,gf,sf ,d,
n,l ,lo,p,cr,c,st,x1,y1,rUgt,gc,
J,pe,py,px,k,e,o,o1,I
50 REM I LIST
60 REM I LPRIIMT
70 REM ILEN $<=15
80 REM ! OPEN #
90 DIM c$(32)
100 GO TO 420
110 IF s$(1)="." THEN LET s$="0
"+s$
120 FOR J = 1 TO LEN s$
130 IF s$(j)="." THEN GO TO 160
140 NEXT J
150 LET s$=s$+","
160 IF s$(LEN s$-l)="." OR s$(L
EN s$)="." THEN LET s$=s$+"0"
170 IF s$(LEN s$-1)="," THEN LE
T s$=s$+"0"
180 RETURN
190 STOP
200 LET o=1: LET o1=0
210 PLOT px*8-o,176-((py+l)*8)
220 DRAW 0,-pe*8-o
230 DRAW pw*8+o*2,0
240 DRAW 0,pe*8+o*2
250 DRAW -pw*8-o*2,0
260 DRAW 0,-0
270 IF ol THEN RETURN
280 LET o=3: LET ol=l: GO TO 21
0
290 STOP
300 READ pe,py,px,k
310 LET pw=0: FOR 1=1 TO pe: RE
AD e$: LET e=LEN e$: IF pw<e THE
N LET pw=:LEN e$
320 PRINT AT py+I,px;e$: NEXT I
330 PRINT AT py+1,px; PAPER 2;
OVER 1;c$( TO pw)
340 PRINT AT k,px; OVER 1; PAPE
R 4; INK 7;c$( TO pw)
350 GO SUB 200
360 LET k$=INKEY$
370 IF k$=CHR$ 10 THEN GO SUB 6
50
380 IF k$=CHR$ 11 THEN GO SUB 7
00
390 IF k$=CHR$ 13 THEN RETURN
400 PAUSE 30: GO TO 360
410 STOP
420 DIM y(18,12): DIMa{18,12):
DIM t(18J2): DIM m( 18,12): DIM
e(18,12): DIM u(18,12)
430 LET exch=1: LET sf=0
440 DIM tn$(12,3)
450 DIM b$( 18,10)
460 DIM t$(3,11)
470 LET t$(1)="PLANNED"
480 LET t$( 2)=" ACTUALS"
490 LET t$(3)="C0MP0SITE»
500 LET n$="BUDGET"
510 LET x$="": LET y$=" "
520 LET t3=0
530 LET m$(1)="JAN": LET m$(2)=^
"FEB": LET m$(3)="MAR": LET m$(4
) =11 APR"
540 LET m$(5)="MAY": LET m$(6)=
"JUN": LET m$(7)="JUL": LET m$(8
)="AUG"
550 LET m$(9)="SEP": LET m$(10)
=:"OCT": LET m$( 1 1 )="N0V": LET m$
(12)="DEC"
560 RESTORE 590: FOR 1=1 TO 18:
READ o$: LET b$(I)=o$: NEXT I
570 GO TO 1470
580 DATA \m 20,0,7, 3,"CATEG0R I
ES«," "
590 DATA "CAPITAL", "CLOTHING","
DENTAL" , " ELECTR I C" , "GAS" , "G I FTS"
, "GROCER I ES" , "HOUS I NG" ," I NSURANC
E" , " LE I SURE " , " L I QUOR " , "MED I CA L" ,
"M I SC. " , "PERSONAL" , "PHONE" , "PROP
.TAXES" , "TRANSPORT" , " VACAT I ON"
600 RETURN
610 DATA INT 14,3,9,6,"M0NTHS",
" " , " JANUARY" , "FEBRUARY" , "MARCH"
, "APR I L" , "MAY" , " JUNE" , " JULY" , " AU
GUST" , "SEPTEMBER", "OCTOBER" , "NOV
EMBER", "DECEMBER"
620 RETURN
630 DATA INT 8,5,7,8,"BUDGET MA
IN MENU"," ", "ENTER ACTUALS", "EN
TER PLANNED", "SET DATE", "D I SPLAY
SUB-MENU", "SET BUDGET YEAR","QU
IT"
640 STOP
650 LET k=k+l: IF k<=py+pe THEN
PRINT AT k,px; PAPER 4; INK 7;
OVER 1;c$( TO pw)
660 PRINT AT k-l,px; PAPER 0; I
NK 7; OVER 1;c$( TO pw)
670 IF k=py+pe4-l THEN LET k1=k:
LET k=py+3: PRINT AT k1,px; PAP
ER 0; INK 7; OVER l;c$( TO pw)
680>PRINT AT k,px; OVER 1; PAPE
R 4; INK 7;c$( TO pw)
690 RETURN
700 LET k=k-1: IF k>=py+3 THEN
PRINT AT k,px; PAPER 4; INK 7; 0
VER l;c$( TO pw)
710 PRINT AT k+1,px; PAPER 0; I
NK 7; OVER 1;c$( TO pw)
720 IF k=py+2 THEN LET kl=k: LE
T k=py+pe: PRINT AT k 1 ,px; PAPER
0; INK 7; OVER 1;c$( TO pw)
730 PRINT AT k,px; OVER 1; PAPE
R 4; INK 7;c$( TO pw)
740 RETURN
750 FOR 1=1 TO 12: LET s=0: FOR
d=1 TO 18: LET s=s+a(d,l): LET
m(d,l)=s: NEXT d: NEXT I: RETURN
760 FOR d=1 TO 18: LET s=0: FOR
1=1 TO 12: LET s=s+a(d,l): LET
t(d,l)=s: NEXT I: NEXT d: RETURN
770 LET s=0: FOR 1=1 TO 12: LET
s=s+a(d,l): LET m(d,l)=s: NEXT
I: RETURN
780 LET 3=0: FOR 1=1 TO 12: LET
s=s+a(d,l): LET t(d,l)=s: NEXT
I
790 LET s=0: FOR 1=1 TO 18: LET
s=s+t(l,12): LET sf =s: NEXT I:
RETURN
800 FOR 1=1 TO 12: LET s=0: FOR
d=1 TO 18: LET s=s+e(d,l): LET
y(d,I)=s: NEXT d: NEXT I: RETURN
810 LET s=0: FOR 1=1 TO 12: LET
s=s+e(d,l): LETy(d,l)=s: NEXT
I: RETURN
820 LET s=0: FOR 1=1 TO 12: LET
s=s+e(d,l): LET u(d,l)=s: NEXT
I: RETURN
830 FOR d=l TO 18: LET s=0: FOR
1=1 TO 12: LET s=s+e(d,l): LET
^u(d,l)=s: NEXT 1: NEXT d: RETURN
840 LET 3=0: FOR 1=1 TO n: LET
s=s+m(18,I): LET sb=s: NEXT I: L
ET 3$=STR$ sb: RETURN
850 LET 3=0: FOR 1=1 TO n: LET
s=s+y(18,l): LET sa=s: NEXT 1: L
ET s$=STR$ sa: RETURN
860 LET 3=0: FOR 1=1 TO n: LET
s=s+y(18,l): LET sa2=s: NEXT I:
RETURN
870 LET 3=0: FOR 1=1 TO n: LET
s=s+m(18,I): LET sa3=s: NEXT I:
880 GO TO 1470
890 RETURN
900 DIM k(18): FOR 1=1 TO 18: L
ET k(l )=t(l,n)/t3: NEXT I: RETUR
N
910 DIM k(18): FOR 1=1 TO 18: L
ET k(f )=u(l,n)/t3: NEXT I: RETUR
N
920 LET s$=STR$ ss: RETURN
930 LET s$=STR$ sss: RETURN
940 LET s$=STR$ pc: RETURN
950 IF gf THEN RETURN
960 LET cr=cr+1
970 IF st==16 THEN GO SUB 1300
980 IF st=0 THEN GO SUB 1140
990 IF st=2 THEN GO SUB 1160
1000 IF st=4 THEN GO SUB 1180
1010 IF st=6 THEN GO SUB 1200
1020 IF st=8 THEN GO SUB 1220
1030 IF 5t=10 THEN GO SUB 1240
1040 IF st=12 THEN GO SUB 1260
1050 IF st=14 THEN GO SUB 1280
1060 IF ss<0 THEN PRINT TAB (c-L
EN s$+1); FLASH 1; PAPER 2;s$;
1070 IF ss>=0 THEN PRINT TAB (c-
LEN s$+1);s$;
1080 IF lo THEN RETURN
1090 LET c=c+5
1100 IF st=4 OR st=10 OR st=12 0
R st=14 THEN RETURN
1110 LET n=n+1
1120 IF cr=4 THEN LET n=p: RETUR
N
1130 GO TO 950
1140 LET ss=!NT (a(d,n)+e5)
1150 GO SUB 920: RETURN
1160 LET ss=INT (m(18,n)+.5)
1170 GO SUB 920: RETURN
1180 LET ss=INT (t(d,n)+.5)
1190 GO SUB 920: RETURN
1200 LET ss=INT (e(d,n)+.5)
1210 GO SUB 920: RETURN
1220 LET ss=INT (y(18,n)+,5)
1230 GO SIB 920: RETURN
1240 LET ss=INT (u(d,n)+.5)
1250 GO SUB 920: RETURN
1260 LET ss=INT (t(d,n)-u(d,n)+.
5)
1270 GO SUB 920: RETURN
1280 LET ss=im' (t(d,12)+.5)
1290 GO SUB 920: RETURN
1300 RETURN
1310 GO TO 1470
1320 LET cf2=1
1330 RESTORE 580
1340 GO SUB 300
1350 GO SUB 580
1360 LET d=k-2
1370 CLS : GO SUB 300
1380 GO SUB 610
1390 LET n=k-5
1400 INPUT ("enter value for ";B
$(D)»"for ";m$(n)),a(d,n)
1410 INPUT "another change ? y/n
LINE q$
1420 IF q$<>"Y" AND q$<>"N" THEN
GO TO 1410
1430 IF q$="Y" THEN GO SUB 1770:
GO TO 1320
1440 IF q$="N" THEN GO SUB 1770:
GO SUB 1850: GO TO 1470
1450 STOP
1460 REM ! OPEN #
1470 CLS
1480 BORDER 0: PAPER 0: INK 7: B
RIGHT 0: CLS
1490 POKE 23658,8
1500 LET cf=0: LET cf2=0: LET gf
=0
1510 PRINT AT 2,0; INVERSE 1; IN
K 2; PAPER 7; "DATE: ";x$;" BUD
GET YEAR: 19";Y$(2 TO 3)
1520 PRINT AT 16,0; INVERSE 1; I
NK 3; PAPER 7; "USE PULL DOWN MEN
US AS FOLLOWS: MOVE BAR CURSOR U
P AND DOWN USING CS 6/7 KEYS
THEN [ENTER], "
1530 LET pw=0
1540 RESTORE 630
1550 GO SUB 300
1560 LET k=k-7
1570 IF k=4 THEN GO TO 1920
1 580 IF k=2 THEN GO TO 1 640
1590 IF k=1 THEN GO TO 3370
1600 IF k=3 THEN GO TO 3630
1610 IF k=6 THEN STOP
1620 IF k=5 THEN GO TO 1880
1630 IF k=0 THEN GO TO 1470
1640 CLS
1650 RESTORE 1660
1660 DATA l^f^ 4, 16,6, 19, "PLANNED
DATA ENTRY"," ", "Whole year","C
hange one entry"
1670 GO SUB 300
1680 LET k=k-18
1690 IF k=1 THEN CLS : GO TO 171
0
1700 IF k=2 THEN CLS : GO TO 132
0
1710 FOR d=l TO 18
1720 FOR n=1 TO 12
1730 PRINT AT 20,0;"ENTER ";b$Cd
), "Planned Budget FOR ";m$(n)
1740 INPUT a(d,n)
1750 CLS
1760 NEXT n
1770 PRINT FLASH 1; "Totaling"
1780 GO SUB 770: GO SUB 780
1790 PRINT AT 20,0;b$(d) 't$( 1) ;"
for ";y$;" is ";":$";t(d, 12)
1800 IF cf2 THEN PAUSE 100: CLS
: RETURN
1810 PAUSE 100
1820 CLS
1830 IF d=19 THEN GO TO 1710
1840 NEXT d
1850 PRINT FLASH 1; "Grand Total I
ng": GO SUB 750: GO SUB 790
1860 IF cf2 THEN PAUSE 100: CLS
: RETURN
1870 GO TO 1470
1880 CLS
1890 INPUT "ENTER Budget Year (Y
Y)"« LINE y$
1900 LET y$=" "+y$"i-« "
1910 GO TO 1470
1920 CLS
1930 BORDER 0: PAPER 0: BRIGHT 0
: INK 7: CLS
1940 LET cf=0
1950 RESTORE 1970
1960 GO SUB 300
1970 DATA INT 8,5,7,8,"DI SPLAY M
ENU"," ","MAIN MENU", "PLANNED","
ACTUALS" , "COMPOS I TE" , "CATEGOR I ES
", "GRAPHS"
1980 LET k=k-7
1990 IF k=1 THEN GO TO 1470
2000 I F k-2 THEN GO TO 2050
2010 IF k=3 THEN GO TO 2740
2020 IF k=6 THEN GO TO 3800
2030 IF k=5 THEN GO TO 3010
2040 IF k^4 THEN GO TO 2410
2050 CLS
2060 PAPER 0: BORDER 0: INK 7: C
LS
2070 RESTORE 610
2080 GO SUB 300
2090 LET n=k-5
2100 IF n>9 THEN LET n=9
2110 LET 10=0
2120 CLS
2130 LET p=n
2140 PRINT AT 0,0;c$
2150 PRINT AT 0,0; INVERSE 1;y$;
t$(1); INVERSE 1;TAB 13;m${n);TA
B 18;m$(n+l);TAB 23;m$(n+2) ;TAB
28;m$(n+3)
2160 FOR d=l TO 18
2170 LET cr=0
19
10
2180 PRINT TAB 0; INVERSE 1;" ";
2190 PRINT TAB 2;b$(d);
2200 LET c=15
2210 LET st=0
2220 GO SUB 950
2230 IF d=19 THEN GO TO 2160
2240 NEXT d
2250 PRINT AT 19,0; "TOTALS ";
2260 LET cr=0
2270 LET st=2
2280 LET c=15
2290 INVERSE 1
2300 GO SUB 950
2310 INVERSE 0
2320 PRINT #1;AT 0,0; PAPER 2;"E
NTER>"; PAPER 0;" 1=CCNT 2=ME
NU 3=C0PY"
2330 LET k=CODE INKEY$-48
2340 IF k=1 AND NOT cf THEN GO T
0 1920
2350 IF k=1 AND cf=1 THEN GO TO
1470
2360 IF k=1 AND cf=3 THEN GO TO
3400
2370 IF k=2 THEN GO TO 1470
2380 IF k=3 AND IN 251<>126 THEN
INPUT #1; PAUSE 30: COPY : GO T
0 2320
2390 IF k=3 AND IN 251 = 126 THEN
PRINT #1;AT 0,0;"TURN ON PRINTER
BEEP .2,30: PAUSE 30: GO TO 2
380
2400 GO TO 2320
2410 CLS
2420 PAPER 0: BORDER 0: INK 7: C
LS
2430 LET lo=0
2440 RESTORE 610
2450 GO SUB 300
2460 LET n=k-5
2470 CLS
2480 PRINT AT 0,0;m$(n);
2490 PRINT AT 0, 13;"PLAN";TAB 18
;"ACT«;TAB 23;"VAR";TAB 28; "PLAN
tf
2500 PRINT t$(3);TAB 13;"YTD";TA
B 18;"YTD";TAB 23;" $ ";TAB 28;
INVERSE 1 ;y$
2510 FOR d=1 TO 18
2520 LET cr=0
2530 LET c=16
2540 PRINT TAB 0; INVERSE 1;" ";
2550 PRINT TAB 2;b$(d};
2560 LET st=4: GO SUB 950: LET s
t=10: GO SUB 950: LET st==12: GO
SUB 950
2570 LET st=14: GO SUB 950
2580 NEXT d
2590 GO SUB 840
2600 PRINT TAB 0;
2610 LET s$=STR$ INT Csb+.5)
2620 PRINT TAB 0; "TOTALS"; TAB (1
6-LEN s$+1);s$;
2630 GO SUB 850
2640 LET s$=STR$ INT (sa+.5)
2650 PRINT TAB (21-LEN s$+1); IN
VERSE 1;3$;
2660 LET ss=(sb--sa)
2670 LET ss=INT (ss+.5): GO SUB
920
2680 IF ss>=0 THEN PRINT TAB (26
-LEN s$+1);s$;
2690 IF ss<0 THEN PRINT TAB (25-
LEN s$+1); FLASH 1; PAPER 2;s$;
2700 LET ss=sf
2710 LET ss = INT (ss+.5): GO SUB
920
2720 PRINT TAB (31-LEN s$+1); IN
VERSE 1;s$
2730 GO TO 2320
2740 CLS
2750 PAPER 0: BORDER 0: INK 7: C
LS
2760 LET lo=0
2770 RESTORE 610
2780 GO SUB 300
2790 LET n=k-5
2800 IF n>9 THEN LET n=9
2810 CLS
2820 LET p=n
2830 PRINT AT 0,0;c$;AT 0,0; INV
ERSE 1;y$;t$(2); INVERSE 1;TAB 1
3;m$(n);TAB 18;m$(n+1) ;TAB 23;m$
(n+2);TAB 28;m$(n+3)
2840 FOR d=1 TO 18
2850 LET cr=^0
2860 PRINT TAB 0; INVERSE 1;" ";
2870 PRINT TAB 2;b$(d);
2880 LET St =6
2890 LET c=15
2900 GO SUB 950
2910 IF d=:19 THEN GO TO 2840
2920 NEXT d
2930 PRINT AT 19,0; "TOTALS ";
2940 LET cr=0
2950 LET c=15
2960 LET St =8
2970 INVERSE 1
2980 GO SUB 950
2990 INVERSE 0
11
3000 GO TO 2320
3010 BORDER 0: PAPER 0: INK 7: C
LS
3020 LET st=16
3030 RESTORE 580
3040 GO SUB 300
3050 LET d=k-2
3060 LET cr=1
3070 CLS
3080 PRINT "CATEGORY DATA"; INVE
RSE l;y$; INVERSE 0,,,
3090 PRINT INVERSE l;b$(d);TAB 1
2;"PLAN";TAB 17;"ACT";TAB 22;"VA
R"
3100 FOR m=1 TO 12
3110 PRINT TAB 0;m$(m);
3120 LET lo=l
3130 LET s$=STR$ INT (a(d,m)+.5)
3140 LET c=14
3150 GO SUB 950
3160 LET s$=:STR$ INT (e(d,m)+,5)
3170 LET c=19
3180 GO SUB 950
3190 LET s$=STR$ INT ((a(d,m)-e(
d,m))+,5)
3200 LET c=24
3210 GO SUB 950
3220 NEXT m
3230 LET lo=l
3240 PRINT »TAB 0; "TOTALS";
3250 INVERSE 1
3260 LET s$=STR$ INT (t(d,12)+,5
)
3270 LET c=14
3280 GO SUB 950
3290 LET s$=STR$ INT (u(d,12)+.5
)
3300 LET c==19
3310 GO SUB 950
3320 LET s$«STR$ INT ((t(d,12)-u
(d,12))+.5)
3330 LET c=24
3340 GO SUB 950
3350 INVERSE 0
3360 GO TO 2320
3370 BORDER 0: PAPER 0: INK 7: C
LS
3380 PRINT AT 18,0; PAPER 2;" Cu
rrency conversion factor "» PAPE
RO;"M» for local ." '"Exchange R
ate for other,"
3390 INPUT "{ENTER conversion fa
ctor J",exch
3400 LET cf=3
2,0
3410 BORDER 2: PAPER 0: INK 7: C
LS
3420 RESTORE 610
3430 GO SUB 300
3440 LET n=k-5
3450 RESTORE 580
3460 CLS : GO SUB 300
3470 LET d=k-2
3480 LET ss=INT (e(d,n)*100)/100
3490 CLS : PRINT AT 3,1;b$(d);»'
for ";m$(n);« - ";ss
3500 INPUT "ENTER new expense."'
exp
3510 LET exp==exp*exch
3520 LET ss=INT (exp*100)/100
3530 PRINT AT 5,1; "New expense=
»;ss
3540 LET bal=e(d,n)+exp
3550 LET e(d,n)=bal
3560 LET ss=INT (bal *100)/100
3570 PRINT AT 7,1;"Total
";ss
3580 PRINT #1;AT 1,0; "More entrl
es? Y/N"
3590 LET 2$=INKEY$: IF z$="" THE
N GO TO 3590
3600 IF z$="N" THEN CLS : PRINT
AT 10,10; FLASH 1 ;"Tota 1 1 ng": GO
SUB 800: GO SUB 830: GO TO 1470
3610 IF z$="Y" THEN PAUSE 30: CL
S : GO TO 3450
3620 GO TO 3580
3630 CLS
3640 INPUT "ENTER Date (YYMMDD)"
, LINE x$
3650 GO TO 1470
3660 CLS
3670 PRINT "ENTER Month #"
3680 INPUT n
3690 IF n<l OR n>12 THEN CLS : G
0 SUB 890: GO TO 3670
3700 CLS
3710 FOR d=1 TO 18
3720 CLS
3730 PRINT AT 6,0; "ENTER ";b$(d)
, "Actuals for ";m$(n)»»
3740 INPUT e(d,n)
3750 PRINT e(d,n)
3760 PAUSE 20
3770 NEXT d
3780 CLS : PRINT FLASH 1; "Total I
ng": GO SUB 800: GO SUB 830
3790 GO TO 1470
3800 POKE 23658,0
3810 LET x1=64: LET yl=88: LET r
1=64
3820>CLS
3830 RESTORE 5860
3840 GO SUB 300
3850 LET gt=k-18
3860 DATA INT 4 , 16,6, 19, "GRAPH T
YPE MENU"," ","PIE CHART", "BAR G
RAPH"
3870 RESTORE 3900
3880 CLS : GO SUB 300
3890 LET gc=k-18
3900 DATA INT 4, 16,6, 19,"DI SPLAY
MENU" , " " , "PLANNED" , "ACTUALS"
3910 RESTORE 610
3920 CLS : GO SUB 300
3930 LET n=k-5
3940 IF gc=1 THEN GO SUB 870: LE
T t3=sa3: LET g$=t$(1)
3950 IF gc=2 THEN GO SUB 860: LE
T t3=sa2: LET g$=t$(2)
3960 IF gt=1 THEN GO TO 3980
3970 IF gt=2 THEN GO TO 4970
3980 POKE 23658,0: BORDER 0: PAP
ER 0: BRIGHT 0: INK 7: CLS
3990 CIRCLE x1,y1,r1
4000 IF t3==0 THEN PRINT AT 10,5;
"No data avaNable";AT 12,5;"Pre
ss ENTER for menu": PAUSE 0: GO
TO 1470
4010 LET ml=r1/8
4020 GO SUB 900: DIM z(18)
4030 IF gc=1 THEN FOR 1=1 TO 18:
LET k(l)=t(l,n)/t3: NEXT I
4040 IF gc=2 THEN FOR 1=1 TO 18:
LET k(l)=u(I,n)/t3: NEXT I
4050 PLOT x1,y1
4060 DRAW 0,r1
4070 FOR 1=1 TO 18
4080 LET z(l)=k(l)*360*.017453
4090 NEXT I
4100 DIM w(18)
4110 LET w(1)=z(l)
4120 FOR 1=2 TO 18
4130 LET w(l)=z(l)+w(l-1)
4140 NEXT I
4150 GO TO 4620
4160 FOR 1=1 TO 17
4170 IFw(l)>=0 AND w (!)<=. 5*PI
THEN GO TO 4320
4180 IFw(l)<=PI AND w(l)>,5*PI
THEN GO TO 4280
4190 IFw(l)>PI AND w(l)<=1.5*PI
THEN GO TO 4240
4200 LET w(l)=2*PI-w(r)
4210 PLOT x1,y1
4220 DRAW -SIN w(l)*r1,C0S w(l)*
r1
12
4230>G0 TO 4340
4240 LET w(l)=w(l)-PI
4250 PLOT x1,yl
4260 DRAW -SIN w(n*r1,-C0S w(l)
*r1
4270 GO TO 4340
4280 LET w(l)=PI-.w(I)
4290 PLOT x1,y1
4300 DRAW SIN w(|)*r1,-C0S w(l)*
r1
4310 GO TO 4340
4320 PLOT x1,yl
4330 DRAW SIN w (I )*r1,C0S w(l )*r
1
4340 NEXT i
4350 LET y2=21-y1/8: LET x2=x1/8
4360 FOR 1=1 TO 18
4370 IF gc=1 AND t(l,n)=0 THEN G
0 TO 4520
4380 IF gc=2 AND u(I,n)=0 THEN G
0 TO 4520
4390 IF o(l)>=0 AND o(l)<=,5*PI
THEN GO TO 4510
4400 IF o(l)>,5*PI AND o(l)<=PI
THEN GO TO 4480
4410 IF o(l)>PI AND o(f)<=U5*PI
THEN GO TO 4450
4420 LET o(l)=2*PI-o{n
4430 PRINT AT y2-C0S o(l)*m1,x2-
SIN o(l)*m1;CHR$ (1+64)
4440 GO TO 4520
4450 LET o(l)=o(l)-PI
4460 PRINT AT y2+C0S o(l)*ml,x2-
SIN o(n*m1;CHR$ (1+64)
4470 GO TO 4520
4480 LET o(l)=PI-o(l)
4490 PRINT AT y2+C0S o(n*m1,x2+
SIN o(l)*m1;CHR$ (1+64)
4500 GO TO 4520
4510 PRINT AT y2-C0S o(f)*m1,x2+
SIN o(l)*m1;CHR$ (1+64)
4520 NEXT I
4530 IF gc=1 THEN FOR 1=1 TO 18:
PRINT AT 1+1,17; INVERSE 1;CHR$
(1+64); INVERSE 0;b$(l);
4540 IF gc=1 THEN LET s$=STR$ IN
T t(l,n): PRINT TAB (31-LEN s$+1
);s$: NEXT I
4550 IF gc=2 THEN FOR 1=1 TO 18:
PRINT AT 1+1,17; INVERSE 1;CHR$
(1+64); INVERSE 0;b$(l );
4560 IF gc=2 THEN LET s$=STR$ IN
T u(l,n): PRINT TAB (31-LEN s$+1
);s$: NEXT I
4570 LET s$=STR$ INT t3: PRINT A
T 20,17; INVERSE 1; "Total"; INVE
RSE 0;TAB (31-LEN s$+1); INVERSE
1;s$; INVERSE 0
2.1
4580>PRI^f^ AT 0,17; INVERSE 1;"
YTD ";m$(n);y$
4590 PRINT AT 1,17; INVERSE 1;c$
( TO 15)
4600 PRINT AT 1 , 19;g$
4610 GO TO 4680
4620 DIM o(18)
4630 LET o(1)=z(1)/2
4640 FOR i=2 TO 18
4650 LET o(l)=z(l)/2+w(I"1)
4660 NEXT I
4670 GO TO 4160
4680 PRINT #1;AT 0,0; PAPER 2;"E
NTER>"; PAPER 0;" 1=MENU 2=TAB
LE 3=C0PY"
4690 LET z=CODE INKEY$-48
4700 IF z=1 THEN GO TO 1470
4710 (F z=2 AND gc^^l THEN GO SUB
900: GO TO 4760
4720 I F z=2 AND gc=2 THEN GO SUB
910: GO TO 4760
4730 IF z=3 AND IN 251<>126 THEN
INPUT #1: PAUSE 30: COPY : GO T
0 4680
4740 IF z=3 AND IN 251 = 126 THEN
PRINT #1;AT 0,0;"TURN PRINTER ON
": BEEP .2,30: PAUSE 30:: GO TO
4730
4750 GO TO 4680
4760 CLS : PRINT AT 0,0; INVERSE
1;c$;AT 0,0;y$;t$(gc); INVERSE
1;TAB 15; "Amount" ;TAB 23;"Percen
t"
4770 LET tp=0
4780 FOR I =1 TO 18
4790 LET pc=INT (k( n*10000)/100
4800 LET ss=INT (t( I ,n)* 100)/100
4810 LET sss=INT (u(! ,n)*100)/10
0
4820 LET tp=tp+pc
4830 IF gc=1 THEN PRINT INVERSE
1;CHR$ (1+64); INVERSE 0;b$(l);
4840 IF gc=l THEN LET s$=STR$ ss
: GO SUB 110: PRINT TAB (20-LEN
s$+1) ;s$;
4850 IF gc=1 THEN LET s$=STR$ pc
: GO SUB 110: PRINT TAB (28-LEN
s$+1);s$;
4860 IF gc=1 THEN PRINT TAB 31;"
ft
4870 IF gc=2 THEN PRINT INVERSE
1;CHR$ (1+64); INVERSE 0;b$( I) ;
4880 IF gc=2 THEN LET s$=SrR$ ss
s: GO SUB 110: PRINT TAB (20-LEN
s$+1);s$;
4890 IF gc=2 THEN LET s$=STR$ pc
: GO SUB 110: PRINT TAB (28-LEN
s$+1);s$;
49
4900 IF gc=2 THEN PRINT TAB 31;"
tt
4910 NEXT I
4920 LET st3=INT (t3*100)/100
4930 PRINT INVERSE 1 ;TAB 0;"Tota
Is =>";m$(n);
4940 LET s$=STR$ st3: GO SUB 110
: PRINT INVERSE 1 ;TAB (20-LEN s$
+l);s$;
4950 LET s$=STR$ tp: PRINT INVER
SE 1;TAB (28-LEN s$+l);tp;TAB 32
4960 GO TO 4680
4970 CLS
4980 DIM q(18)
4990 LET gmax=- 10000: LET mln=10
000
5000 IF gc=l THEN GO SUB 5310
5010 IF gc=2 THEN GO SUB 5360
5020 LET loc=58
5030 LET sca=0: IF (gmax-mln)<>0
THEN LET sca=(80-12)/(gmax-ml n)
5040 PRINT AT 2 1 ,7;"ABCDEFGHI JKL
MNOPQR"
5050 FOR 1=0 TO 8 STEP 4: LET zz
=INT (,5+mln+((gmax-mIn)/8)*(8-l
)): PRINT AT 11+1,5-LEN STR$ zz;
zz: NEXT I
5060 FOR 1=8 TO 8+8*10 STEP 4: P
LOT 57,1: DRAW 255-112,0: NEXT I
5070 FOR 1=1 TO 18
5080 FOR I =0 TO 4
5090 IF NOT q(l) THEN LET loc=lo
c+1: GO TO 5130
5100 PLOT loc,8: DRAW 0,12
5110 LET loc=loc+1
5120 DRAW 0,(q(l )-mIn)*sca
5130 NEXT I
5140 LET loc=loc+3
5150 NEXT I
5160 IF gc=1 THEN FOR 1=1 TO 9:
PRINT AT 1,0; INVERSE 1;CHR$ (1 +
64); INVERSE 0;b$(l);
5170 IF gc=1 THEN LET s$=STR$ IN
T t(l,n): PRINT TAB (14-LEN s$+l
);s$: NEXT f
5180 IF gc=2 THEN FOR 1=1 TO 9:
PRINT AT 1,0; INVERSE 1;CHR$ (1+
64); INVERSE 0;b$(l);
5190 IF gc=2 THEN LET s$=SrR$ IN
T u(!,n): PRINT TAB (14-LEN s$+l
);s$: NEXT I
5200 IF gc=1 THEN FOR 1=10 TO 18
: PRINT AT 1-9,16; INVERSE 1;CHR
$ (1+64); INVERSE 0;b$(l);
5210 IF gc=1 THEN LET s$=STR$ IN
T t(l,n): PRINT AT l-9,(30-LEN s
$+1);s$;
5220>IF gc=l THEN PRINT AT 1-9,3
1;" ": NEXT I
5230 IF gc=2 THEN FOR 1=10 TO 18
: PRINT AT 1-9,16; INVERSE 1 ;CHR
$ (1+64); INVERSE 0;b$(l);
5240 IF gc=2 THEN LET s$=STR$ IN
T u(I,n): PRINT AT l-9,(30-LEN s
$+l);s$;
5250 IF gc=2 THEN PRINT AT 1-9,3
1;" ": NEXT I
5260 PRINT AT 10,0; INVERSE 1 ;c$
;AT 10,9;"Total: ";INT t3
5270 PRINT AT 0,0; INVERSE l;c$
5280 PRINT AT 0,6; INVERSE 1;"YT
D ";fn$(n);" ";y$;" "; INVERSE 0;
g$
5290 GO TO 4680
5300 RETURN
5310 FOR J=1 TO 18
5320 LET q(J)=t(J,n): IF q(J)>gm
ax THEN LET gmax=q(j)
5330 IF q(J)<mln THEN LET mln=q(
J)
5340 NEXT J
5350 RETURN
5360 FOR J = 1 TO 18
5370 LET q(J)=u(J,n): IF q(J)>gm
ax THEN LET gmax=q ( j )
5380 IF q(J)<mln THEN LET mln=q(
J)
5390 NEXT J
5400 RETURN
5410 REM ! CLOSE #
5420 CLEAR : RANDOMIZE USR 100:
SAVE "budget.BJ" LINE 10
22
SDOS AUTO^^DEX, MARK^MOVE, AND VERI-DISK
Bob Hartung, 2416 N. Co. Line, Huntertown, IN 46748
In the January issue oi SOU I gave the listing 4or a
routine able to store and access ^roni a single disk an
index of more file titles than most of us will ever get
around to using (no, tracks/disK X no. files/disk). This
DOSDEX routine is based on an adapation of the versatile
SDOS menu-loader created by Roelof Hulder with several
modifications by John Oliger.
The machine code for DOSDEX and other utilities listed
below is that used in the menu-loader except that if it is
poked into a 39-byte first-line REH the 8th byte must be
an 8 instead of the 14 in the original listing which
utilizes a fast FOR/NEXT definition. For those who have
the menu-loader routine with the code source in a line 10
q$ definition, after creating a 39-byte line 1 REM the
code may be moved from q$ to the REM by using LISTING 1.
If starting from scratch the code may be put into a DATA
line and READ used for the pokes.
Rather than Met your fingers do the walking" through
the pages of DOSDEX, the AUTO-DFX in LISTINGS 2 and 3
(SEARCH and FILE^DEX) provides an automatic search for a
given title among all those saved on a disk as c* arrays.
It provides the option of a full-title search when the
search word is padded out to a length of 10 by characters
or spaces, or a wild-card search can be made for any set
of 1-9 consecutive characters found in a title. If the
wild-card search word is to be found at the very beginning
of the file title, entering one leading space before the
1-9 character search word will allow a much faster search
to be made as is also done for a full-title search.
The main drawback to using a full-title search is that the
search-word must be entered exactly as the title you want
to find. You could turn your printer on and key (LET /P=0>
to print out a hard copy of the titles as the data disk is
made up— just in case your memory fails. But then that
defeats the purpose of an automatic search if you have to
eyeball your way all through the printout or else use
DOSDEX to find how to enter the title!
Anyway, here's how it works, if you're interested.
The AUTO.DEX search routine is saved to file 0 by (RUN
9999> and FILL.DEX is saved to file 1, also by (RW 9999).
If you want a full display of individual files in FILE-OEX
save mode, start with the listing as given for DOSDEX in
the January SDU, and change line 526 to correspond with
LISTING 3 which displays only the disk number, format
title, and prompts. Lines 600-650 can be omitted in either
case. The mod for line 526 is to to save as DATA c$() the
catalog info from each file disk in a numbered sequence.
After these programs have been saved to your AUTO-DEX
disk, label your file disks numerically if you have not
already done so for DOSDEX and key (LOAD) with the
AUTO-DEX disk in the drive. At the prompt, key (4) to load
FILE-DEX. Insert file disk 1 in the drive and key an
upper-case <C) for CAT. Return the AUTO-DEX disk to the
drive and key upper-case (S> to save the directory data,
and so on. As for DOSDEX, you could easily adapt the
routine to use one drive for the index disk and the second
drive to catalog your file disks.
To make an auto-search, key (LOAD) with the AUTO.OEX
disk in place and any key except <4). At the search-Kord
prompt, if an exact-title search is to be made, make your
entry, then add spaces to pad out its length to 10. If you
hold down the space-bar for an auto-repeat, any extra
spaces added to the title will be truncated to the correct
length, Precede any wild-card set of 1-9 characters with
one space if that character set occurs at the very begin-
ning of the targeted file title. If the set occurs else-
where in the file title the leading space is omitted. Then
enter a null-string <ENTER> if it is a Basic listing, or
(token-word) plus (n) or (*) to denote the type of file.
Uhen a match is found with the search-string title, the
file number and the formatted title of the required disk
is displayed. When that disk is inserted the file may be
loaded from it. In a search for a full-title or a leading
character-set the drive will seldom stop running from one
index file to the next but a random wild-card search will
take a little longer. The string-slicing will not allow
TIHACHINE to compile the wild-card search, but those who
are into machine code and want the ultimate in speed could
adapt Tom Woods' Profile search routine to do it.
Roelof has also written another very useful utility he
calls Extractor that among other things moves selected
files from one disk to another. This method is a much
safer way of recovering unused disk space even when an
erase-and-recover routine is available. When one sector
is being re-copied to another on the same disk there is
always the risk of a glitch corrupting part if not all of
the disk data. While not nearly as elegant as Roelof's
Extractor, the MARK-MOUE routine (LISTING 4) adapted from
his SDOS menu-loader provides the essentials to format a
target disk and move to it the files selected from a
source disk. Keying (SPACE) will mark a file for moving, a
zero will unmark it, any other character will advance the
cursor, and (ENTER) will commence the moves,
LISTING 5 is yet another adaptation of the SDOS menu-
loader which uses the VERIFY function to check the integ-
rity of each file on a disk. It might be in order here to
discuss some DOS facts of life that, human nature being as
it is, probably all of us are aware of but have neglected
at times. To be on the safe side-and we're talking about
all magnetic media data storage now— it is recommended
practice to use a three-tiered approach. This calls for
14
23
at least two back-up copies, either disk and disk, or disk
and tape, for any files that we don't want to lose. The
original is then used only when an update is added or when
both the working and backup files become corrupted or
lost. It is also good practice to periodically check these
files, especially if loading errors are encountered on any
disks done at about the sate time or after the backups.
By their very nature, all magnetic recording media
(including audio and VCR as well as DOS) begin losing some
of their playback signal strength, particularly in the
higher frequencies, from the instant any recording is made
upon them. This occurs at a diminishing rate somewhat
like an inverse logarithmic progression or "half-life"
process. As this "dipping" approaches the level expressed
in percentage on all labelled name-brand disks, it happens
more slowly but, unfortunately, never quite stops at zero.
Of course, many other factors could cause loss of data.
These include possible instantaneous damage by magnetic
fields such as a speaker or nearby AC cord, or static
voltage potentials such as those on the face of a TV or
monitor CRT or even on your fingertips if you have walked
across the room or shuffled your feet on a carpet in low-
huraidity conditions. Creasing or folding a disk, dropping
something upon it or writing on the sleeve with too much
pressure, or touching the exposed surface can ruin it.
There is also the possibility of dirt on the drive-heads
or dust, heat and humidity hastening a disk's demise.
Tobacco smoke is dangerous to the health of data as it is
to the user's. Because of greater data-density per unit
of media area, quad density systems are more sensitive to
all these factors than double density systems, particular-
ly when the less-costly DD disks are used with a QD
system, which most of us do at times.
As John Oliger noted in the first issue of SOU, SDOS
users have an advantage over users of some systems because
we get an audible warning whenever a disk sector fails to
save/verify or load and must be re-tried. However, even
with SDOS an infrequently-used file or backup disk might
drop below a critical clipping level without our being
aware of it. If ever a data failure is encountered on a
disk that previously showed no problems, unless you have
done so periodically it is time to check all disks
formatted at or before the time when that one was done.
Unless you are turned on by such things as watching
paint dry or keying in VERIFY /"name" file-type for every
file on every disk, a routine like VERI-DISK will take
some of the tedium out of doing this. After loading VERI-
DISK, insert a file disk and then press any key to CAT it
and start the verifying sequence. Any failed files will
be displayed by name and number in the order they are
stored on the disk.
Since the VERIFY function tries only one time before
returning an error report when even one item of data
fails, if it is done in time it is usually possible to
re-save or move a file that doesn't verify because of
clipping. Because after extended non-use all magnetic
media also loses coercivity, i.e., it takes a "set" and
becomes less responsive to recorded signals impressed upon
it, it is good practice to move the entire contents to
another freshly-formatted disk. AFTER MAKING SURE ALL
FILES HWE BEEN HOVED SUCCESSFULLY this can become your
new backup or work-disk, or else the original disk may
then be re-formatted and the files moved back to it from
the intermediate storage disk.
When the clipping level has become critical, data may
still load OK on the drive used to save it but not on
another, so it is a good idea to note the drive number on
each disk label. If a disk will not load at all, John
Oliger's routine for restoring directory files (8DU issue
1) may work to salvage some if not all the files in
instances where track 0 has become corrupted.
LISTING 1
1 REH 123 «9-byte MC is poked here* 23454789
5 LET a=VAL "PEEK 23(S35+PEEK 23436«25645"
10 LET q$="<Load original menu-loader listing that has a
q$ definition. Delete all lines except this one. Replace
first + CHR$ VAL "14" with * CHR$ VAL "8" in the
definition. Add the lines for this routine and <RIW>.)"
20 LET M
30 FOR n=a TO a+38
40 POKE n, CODE q*(d)! REM To use a DATA line, READ p:
POKE n,p
50 LET d=d+l
<0 NEXT n
100 DATA 205,10,0,42,75,92,17,8, etc. i REM Not needed to
transfer from q*
LISTING 2 (SEARCH)
1 CLEAR ! LET n=l
5 PRINT ll8;"Key 4 TO SAVE DATA index files OR any othe
r key for AUTO.DEX": PAUSE 8: IF INKEY<="4" THEN LOAD /"FI
LL.DEX"
18 LET d=l
28 DIM c*(178,28)
3B LOAD /"l" DATA c$()
188 INPUT "Search-wordi 1-9 CKR$ wild-card (plus 1 leadin
g space if start of title) OR pad to t arrow if full tit
le-";s*'""""" DATA n DATA ♦ CODE ABS WL ?",t$! IF LEN s$)
18 THEN LET 5$=s$( TO IB)
118 LET t«e: LET f=B: LET f==(l (m t*=" DATA n")4(2 AND t
DATA $")+(3 tm t*="CODE ")*(4 AND t$:="ABS ")4(5 AND t
*="m ")
115 IF s*(l)=" • THEN LET s»=s$(2 TO )! LET s^LEN s*: LET
t=l! 60 TO 148
128 LET 5=LEN si
138 IF s<18 THEN GO TO 188
148 FOR /178
2A
158 IF cf<n,l)=" RESTORE " THEN GO TO 488
168 IF c$(n, TO s)=5* AND CODE (c«(n,ll))=f THEN LET k=n!
60 TO 6ti
178 NEXT
175 GO TO 488
188 LET p=l
198 FOR k=l TO 178
195 IF rt(k,l)=' RESTORE ' TH^ 60 TO 488
288 PRM lie;AT 8,e;d
285 FOR /i8""5
218 IF c*(k,n TO n+s-l)=s* m CODE (c*(k,l!))=f THEN GO
TO 488
238 NEXT
248 NEXT k
488 LET d=dtl! m ERR GO TO 1888: LOAD /STR$ d DATA rtO:
ON ERR RESET : 60 TO 14B*(s=18 OR t)+18B»(s<lB AND NOT t)
688 PRINT sfjTAB lljUi" = search*" "c*(k, TO IB);' '!«}
" is file «";k,"on disk r|d;" -- •;c*(178, TO 16)! PRINT
It8{"ln5ert disk i key ENTER TO LOAD or any other key TO RE
PB!|T"! PAUSE Bs IF CODE INKEY*<>13 THEN 60 TO IB
685 LET a=CODE c$(k,ll)! LET dl=c*(K, TO 18)s IF NOT a TH
EN LOAD /d*
618 IF a=SGN PI THB4 LOAD /d» DATA nO
628 IF a=WL "2" THEN LOAD /d$ DATA n$()
638 IF a=INT PI THEN LOAD /d$CODE
648 IF a=WL '4' THEN LOAD /dIABS
658 IF a=VAL "5" THEN LOAD /dmi
1888 ON ERR RESET : PRINT s*;" "{W; FLASH Ij" NOT FOUND "
: GO TO 18
2888 STOP
9999 CLEAR s SAME /8
LISTING 3 <FILE_DEX)
1 REM 1234567898123456 HC goes here 123456789
2 CLEAR : DIH rtCm M78",WL "28"): LET s=SON Pis LET
o=NOT PI: LET d=s
5 LET a=VAL "PEEK 23635+PEEK 23636*256+5" ! LET c=INT (a
/WL •256")! POKE WL ■23549" ,WL "195"! POKE WL "23558",
a-<c»'vWL "256")! POKE WL "23551", C! LET fi=USR WAL "23549
•: LET n<=c$<m "178", TO m "16")
388 CLS ! IF n$(LEN nf)=" " THEN LET n«=n»< TO LBI n»-5)!
GO TO m "388"
326 PRINT AT o,Di" Oi5k#";d-5i" ? ■;n*;ifo{"Keyi NEXT CAT S
WE il"!d
518 LET a^INKEY*! IF a$='" THEN GO TO WL "518"
522 IF a*="C" THEN OPEN «2,"P"! CAT ! CLOSE »2! GO TO INT
PI
526 IF a*="S" THEN LET d=d45! SWE /STR$ (d-s) DATA c*()i
GO TO IffT PI
528 IF a*="N" THEN INPUT ' INPUT NEXT H'jdi 60 TO INT PI
538 GO TO UAL "518"
9999 CLEAR i SAVE /"FILE-DEX" LINE 2
LISTING 4 <HARKJ10yE)
1 REM 1234567898123456 MC goes here 1234567898
2 CLEAR ! DIM c$<VAL "178",VAL "28")! LET s=S6N PI: DIM
ii»(gAL "177" ,5)! LET f=MAL "4"! LET t=WAL "IB": LET o=NOT
Pi! INK MAL "7"! PAPER O! BORDER os CLS
18 DIM fi(VAL "6",sH)! LET «(s+s)=" DATA n": LET «<1N
T PI)=' DATA $": LET «<m "4")="C0DE ": LET «<m "5")=
■ABS •: LET f^VAL "6")="^ "
28 PRINT AT o,ti'FILE-MOyER"|«o;"Place source disk in DR
IVE B & target disk in DRIVE 1 Key any CHR» TO C
AT source disk or key ENTER TO NOT CAT ": PAUSE o; IF CODE
INKEYfOVAL "13" THEN OPEN ii2,'P"! CAT ! CLOSE 112
38 INPUT ""! PRINT «Bj" TO FORMAT target disk? y/n't PAU
SE 0! IF lNKEY«="y" THEN INPUT " INPUT FORMAT t title to
arrow" ia$! LET /d=l! F0I9«T /a*: LET /d=fl! OPEN «2,"P"! C
AT ! CLOSE (12
48 CLS ! PRINT (toi'KeyiSWCE to mark CHR$ to reMiew8 to
revise ENTER TO START MOVE"
188 LET al=""! dm INK sj^ML "255", o: DRAM INK S|o,VAL "
175"! DRAW INK 5;WL "-255", o: DRAW INK Sio.WAL "-175"
288 LET a=yAL "PEEK 23635tPEEK 23636»256+5" : LET c=lMT <a
mi "256")! POKE m "23549" ,m "195"! POKE VAL "23558",
a-(c»WL "256")! POKE WL "2355r,cs LET fi=USR VAL "23549
"! LET row=s+s! LET col=WL "9"! LET n«=c*(WAL "178", TO V
AL "16")
388 IF n*<LEN n*)=" " THEN LET n$=nf< TO LB^ n*-5)! 60 TO
UAL "389"
328 PRINT AT o.VAL "16"-<LEN n«/WL "2")) OVER s; INK VAL
"5";n*jAT o.VAL "S'i OVER s;" ': PAPER o
485 LET L=0! LET f=S! LET c=M (fi/WL "18")! LET dif=IN
T ((4i/VAL "18'-c)«WL "18'+VAL ".4"): LET 1oop=VAL "17"
418 LET ql="p"s LET it=5! IF loop>={i THEN LET loop=fi! 6
0 TO m "425"
415 FOR i=s TO c! FOR iJ=o TO loop! PRINT AT row+i»,t-f ;a*;
AT row+n.t-LEN STRf itiit!iJ*(it)}c$(it, TO t)j" ■;«(CODE
c*(it,m "ir)*l): LET it=itH: NEXT n: 60 SUB MAL "588"!
NEXT i: FOR i=5+s TO VAL "19"! PRINT AT i,t-f;a$! NEXT is
IF NOT 6\i THEN GO TO WL "418"
425 IF f THEN FOR ibfo TO dif-ss PRINT AT row*ii,t-f ja^jAT
row4iit,t-LEN STR* itiit)ni*(it)ic»(it, TO t)|" "i«(CODE c$<
it,VAL "ID+D: LET it=it+5: NEXT m: IF loop)=fi THBI LET
^=0
427 IF NOT i THEN LET it=fi+s
438 GO SUB VAL "588"! GO TO VAL "418"
5BB FOR L=o TO i»-S! PRINT AT row+L,colp INVERSE s;")"! IF
q«<>"" THEN FOR a=5 TO PlfPI: NEXT a: LET q$=""
518 LET al=INKEY*! IF a*="" THEN LET q$="p"! GO TO VAL "5
18"
512 IF a*="8" im LET iii$(it-iHL)=" "i PRINT AT rowH.col
+SGN PI;" "
515 IF a*=" ' THEN LET !i)*(it-ni+L)=lB"! PRINT AT row+L.coI
+SGN Pl!"B"
528 IF a*=CHRf VAL "13" THEN GO TO WL "668"
538 PRINT AT row+L,col-5-si" "i NEXT Ls LET a*="
"! RETUm
6B8 BORDER VAL "7": PAPER VAL "7": INK os CLS ! INPUT "So
urce & object disks in drivesTKey ENTER TO START HOVE 'ja*
! CLS ! PRINT FLASH s|" MOVING! 00 NOT STOP till end "
681 FOR M=s TO VAL "177"
682 IF c*(M,s)=" RESTORE " THEN GO TO WL "788"
685 PRINT AT t,t;"File! ";ni
618 LET dl=cf(M, TO t): LET a=CODE c*(M,m "11")! IF NOT
a AND ni$<H)» V im MOVE m
615 IF a=s AND b$(M)=W THEN MOVE /d$ DATA
2.5
62i IF a=yAL "2" ^^D ra$(H)=W THEN MOME m DATA *
638 IF a=IKT PI did ii$(H)=ir THEN MOVE /c»CODE
648 IF a=yAL "4" «<D n»$(H)="lf THEN MOUE /dMBS
658 IF a=MAL "5" tfJD i»*<M)="lBf THEN MOVE /d$m
668 NEXT H
788 PRINT AT o,o,,AT t,t; FLASH 1;" MOVE OVER "! INPUT "K
ey ENTER FOR NEW CAT Any CHR$ STOP "ja*.- IF al=" T
HEN RUN
718 STOP
9999 CLEAR ! SAVE /"MARILHOVE" LINE 2
LISTING 5 (VERLDISK)
1 REM 1234567898123456 MC Qoes here 123456789
2 CLEAR ! DIM c$(VAL «178%VAL "28«)j LET s=SGN PI: LET
f=VAL "4" J LET t=VAL MB"? LET o=r^OT PI
IB DIM «(VAL "6«,5+5)! LET «(5+5)=* DATA n"; LET «<IN
T PI)=" DATA LET «(VAL "4")='C0DE LET «<m "5")=
"ABB "! LET f$(VAL "6")=m '
28 PRINT AT o,tj''VERLDISK'i«oi"Place NEXT disk in DRIVE
, then any key TO VERIFY "j PAUSE o: OPEN «2,"P"5 CAT i C
LOSE «2
288 LET a=VAL 'PEEK 236354PEEK 23636«25645« : LET c=lNT (a
AWL •256"): POKE VAL •23549" ,VAL •195" : POKE WL •2355e",
a-(c»VAL ■256^); POKE VAL -23551", c; LET f i=USR m "23549
•: LET n$=c*(VAL "178% TO VAL "U")
218 ON ERR 60 TO 888
238 FOR nFS TO VAL "l??"
248 IF c$(ni,5)=« RESTORE " THEN 60 TO VAL •788'
258 PRINT HojAT o,o|"FiJe: "jni
688 LET d*=c*(ra, TO t): LET a=CODE c*<i»,VAL "IT): IF NOT
a THEN VERIR- /d*
618 IF a=5 THEN VERIFY /df DATA
628 IF a4WL "2" THEN VERIFY /dl DATA $
638 IF a=lNT PI THEN VERIFY /d$CODE
648 IF a=^ THEN VERIFY /d«ABS
658 IF a=VAL "5" THEN VERIFY /d$VAL
668 NEXT M
788 ON ERR RESET s FOR hfs TO fs BEEP .2,RND«5: BEEP .1,
RND*155 NEXT m
718 PRINT tlojAT o,o;n$; FLASH Ij" VERIFY OVER % FLASH 8,
•Note failures-any key FOR NEXT ": PAUSE o: RUN
728 STOP
888 PRINT "Failed at «» jroj" "jc^dn, TO t);" "jlKCODE c$(
nijVAL "ID+l); NEXT ni
9999 CLEAR : SAVE /"VERLDISK" LINE 2
ADDENDUM: Since sending the above niss. to Bill, response
to the DOSDEX article indicates some were confused by the
instructions. Sorry about that! H the 8th byte in your MC
listing or the 8th definition in q$ is already an 8, don't
change any of the code to POKE it into the line 1 REM for
DOSDEX or the aboue routines. Please note that in listings
3, 4, and 5, as well as DOSDEX, the respective values in
lines 5 and 200 nust be as given above for these listings,
NOT as they are in the menu-loader. The original reenu-
loader values were set up to point to the VARS location of
q* in RAM, and so msi be re-calculated if this q*
location is to be used for the code instead of the REM.
The Issue Disk
The UP-DATE ISSUE DISK Is a valuable tool to
verify all of your key-In work. And you have all of
the programs and utl Mtles to use whi le you wait for
the time needed to devote to key- In projects (maybe
next month). Maybe you wont have the time, ever.
It usually takes me about two weeks of work to put
together the Issue disk and to verify all of the
programs and utilities. Then it Is time to start
work on the next magazine Issue. UP-DATE has become
a full time Job and I hope that you can see the
effort expended In a gradual Improvement In the
contents. As the October Issue begins to support
the QL users I will try to hold TS-2068 coverage
down to 30 pages, although that Is difficult to do
when the "IN BASKET" contains such outstanding
articles as those submitted by the authors for the
Apr I I 88 Issue.
The LARKEN DISK Section
"BUDGET", by Bob Mitchell, came In to UP-DATE
as a Larken Disk software. I kinda switched It to a
"universal software", by nothing more than writing
syntax. Part 2 of this software will be given In
the July Issue of UP-DATE and will give the "Loader
Disk Manager" for LARKEN, OLIGER, and AERCO disk
systems. UP-DATE has a treasure trove of excel I ent
Larken Disk articles to present. They had to be
placed In Back Log because of a equipment break-down
(I couldn't verify the programs.). These arti cl es
and programs will be presented In the July Issue and
will take up about 8 pages.
TS-2068 DISK DRIVE SUPPORT
We TS-2068 users are currently supported by two
dedicated Disk Drive Hardware engineers. John
Ollger (The Ollger Co.) and Larry Kenny (Larken
Electroncis) form the nucleus of our disk drive
system support. Aerco seems to have developed other
Interests which has slowed further development of
the Aerco FD-68 DOS. Maybe Aerco will see fit to
finish the DOS? The Larken SKDOS Cartridge can give
FD-68 users a finished DOS for use with the FD-68.
In the meantime, both Larry Kenny and John Ollger
are continually busy up-dating their disk drive
systems and providing new hardware. UP-DATE salutes
these two dedicated supporters. Both deserve our
business. And, both individuals are eager to
support their customers and the TS-2068 "user
family", with detailed information In the pages of
UP-DATE. Larken Electronics and The Ollger Co.,
together, are the BEEF of our TS-2068 Hardware
support. Trust them, and look for their products.
.17
Z6
DENSE PACK BASIC
A Method to Conserve Memory and Speed Up Basic
Most Computers use variations of the Dartmouth
BASIC Language as their operating systems. The
assembly language routines In ROM are designed to
facMlltate the Basic language as used by the
operator and the Basic Editors of the computers are
designed to process the particular variation of
syntax used. Generally, the differences In syntax
are easily learned by a user who has some experience
operating any computer. So, once one learns the
syntax one can begin to program the computer. This
Is quite an advancement over the way programming was
done In the 60's, when a computer was programmed by
punching holes In a card to be fed through a card
reader.
So, things are now neatly arranged. We have
the BASIC language to use and the computer Is
progranwied to accept Key Words that the operator
Inputs from a keyboard and then Branch to a fixed
ROM routine to execute the operator's desires. The
operating system Is FIXED In ROM. The BASIC
language Is Just "semi -fixed" and has some
flexibility. One of the flexible features has to do
with mathematics expressions. The Central
Processing Unit (CPU) of the computer has an Annex
called "The Arithmetic Logic Unit" (ALU) which
processes mathematics expressions and provides a
Resultant. When a math expression Is Included In
Basic Programming, the ALU solves the expression and
the CPU stores the resultant.
If, within a program line, the expression "LET
a=20*40" Is used, the ALU solves "20*40" to allow
the variable a to be assigned as 800. Almost all
corrmonly used math expressions can be sent "IN
BASIC" to the CPU. "LET c=2*Pl*r" Is acceptable as
syntax to the basic Intrepeter, and the CPU calls
upon It's ALU to solve the math before it assigns a
value to var c. Then If we use other math equations
most will be acceptable. How about Boolean Logic
expressions? Why not? Boolean Logic Is the basis
for the logic of most of the IC chips In the
computer (AND Gates, OR Gates, NOT Gates, etc«).
The CPU Itself Is largely a Boolean Logic device.
What Is BOOLEAN anyway? Well, most of our
younger set believe that computers sprang up as a
new Invention during the 70's. Actually most of the
principles of computing extends back more than a
hundred years. What sprang up was new manufacturing
techniques of packaging electronics components.
George Boole (1815-1867) gave us the logic used in
computers. Mr. Boole spent a lifetime Integrating
two separate sciences, LOGIC and Mathematics. Then
Mr, Einstein made great use of Mr. Boole's works and
added to It. Before, Logic was considered to be
literal, and mathematics was limited to the
factoring of numbers. Boolean logic uses such
expressions as AND, OR, NOT, In both a math and
relational Logic sense.
Boolean logic can greatly shorten the way we
express ourselves In Basic programming. Boolean
logic can also speed up the execution of Basic
programming. When Boolean expressions shorten the
literal expressions In Basic, the programming does
not require as much memory for storage. Most
College courses In (Computer Programming Ignore
Boolean because It Is really an advanced Math
discipline, and to Introduce It in a programming
class would require more semester time. Yet, It
does not require extensive study to use simple
Boolean expressions to great advantage.
Dense Pack Basic employs Memory and Time Saving
techniques Integrated with Basic Programming, Dense
Pack Is not a new language, but Is a "method of
programming", using math as logic, and existing
memory saving techniques. It Is reasonabi e to
conclude that If a line of Basic programming can be
reduced In Byte length by as much as 70^, the
programming In the line will execute faster.
Supporting this thesis Is the fact that arithmetic
functions executed by the ALU are the fastest
operations performed by the computer.
The October Issue of UP-DATE discussed "Pseudo
Hex", a table of variables that substitutes for
numbers. Most programmers use the principle, but In
a un-organlzed manner. The pseudo hex table was
designed to assist In remembering the variables used
to represent numbers 1 through 20, These are the
most used numbers in computer programs. To review,
Pseudo Hex uses a double character variable "o",
where "oa=1, ob=2, oc=3, to ou=20", A person tends
to quickly learn that "oe=5". In the learning
phase, one can count on fingers, using the alphabet
to Intrepet the variables. The use of such a
variable system quickly becomes habit to
programmers.
The Pseudo Hex table Is constructed In program
lines. Then GO TO the first line initializes the
variables to memory, A good technique to use with
disk drive systems Is to then SAVE the Variables to
disk where the vars table can be re-loaded to a
CLEARED Basic program. When that Is done, the
program lines may be deleted. The memory cost of
initializing the pseudo hex variables Is usually
recouped within the first 20 lines of a basic
18
27.
program, A basic program of 20K in length is
typically reduced to about 16K in length by using
the variables table.
Now we wl II get into the meat of Dense Pack as
It employs Boolean Logic and math operators In Basic
Programming. The best way to start is with an
examp I e. I M I g I ve a typ I ca I con vent l ona I p rogram
line after a MENU which has 9 optional electlves.
Normally the menu electlves will be listed 1 through
9 and the operator touches a number key to make a
selection. Ordinarily, a INKEY$ prompt would be
used to assign the key touched to a numbered
variable such as "z". The typical program lines
after would be: 100 IF 2=1 THEN GO TO 500 - 102 IF
z=2 THEN GO TO 600 - 104 IF z=3 THEN GO TO 700 -
etc, etc, until "9 IF THEN LOGIC lines are
programmed". Then there would be a "Key Lock" line
as: 118 IF z<l OR z>9 THEN GO TO 90 (the menu).
The dense pack presentation would be only ONE
line of programming Instead of 10 lines. Vars would
be used for each of the small numbers. The result
would be a reduction of 9 lines of programming and
75% of memory required to store the programming.
The equlllvant programming In Dense Pack would be:
102 GO TO (2=oa)* 500 +(z=ob)* 600 +(z=oc)* 700
+(z=od)* 800) +(z=oe)* 900 +{z=of)* 1000 +(z=og)*
1100 +(z=oh)* 1200) +(z=ol)* 1300 +(z<oa OR z>ol )*
90.
The example dense pack (single) line requires
only 25^ of the memory needed to store the
conventional 10 lines of the first example, and 9
fewer program lines. I will break down one of the
IF THEN conditionals. "GO TO (z=oa)* 500". The
operator Is "GO TO" and is used only once for the 10
evaluations. "IF and THEN" are Implied for each of
the 10 conditions that are Inclosed In (brackets).
The term means: IF z=l THEN GO TO 100. When the
program line Is processed ALL 10 of the conditions
are evaluated as a si ng I e expression, where with
conventional IF THEN conditions each program line Is
evaluated and a false condition would be Ignored,
The dense pack line operates faster and conserves
75^ of program memory.
Now we will explore some more Dense Pack
examples. I'll set up a program line with a pair of
prompts. One will opt to solve the Circumference of
a circle, and 2 will opt to solve the Area of a
circle. 10 LET r=9: INPUT "<1> Circumference or <2>
Area";a: LET y= (2*PI*r AND a=l) + (2*PI*r 2 Al^
a=2). That little routine lacks a trap for wrong
key hit. Conventional IF THEN statements may be
mixed with Dense Pack logic expressions, as: 100 IF
a<10 THEN PRINT ("yes" AND a<6) + ("no" AND a>5) : IF
a<3 THEN GO TO (a<l)* 50 +(a=1)* 100 +(a=2)* 200).
In that example IF a Is smaller than 10 the prlnf
statement will execute and print "yes" If a Is
smaller than 6 or "no" if a Is greater than 5. Then
the last GO TO will execute only If a Is smaller
than 3.
Here Is an actual dense pack line used In one
of my programs. vars lx=maxlmum printer line,
qq^center of page, tb=tab, ps=prlnt style elected,
xo=exlstlng max printer line, lo=exlstlng line
length, and ll=llne length elected. A matching line
"ma" IS computed: 8022 LET lx=(80 AND ps<3) + (96
AND ps=3) + (136 AND ps>3): LET qq= INT (lx/2+ .05):
LET ma= INT (. 5+lx-lo/xo) : GO SUB 8088: LET tb=INT
(dx-ll )/2+.5 - 8088 PRINT AT 10,2;"Key In line
length"»'TAB 2;lx;"=Max ";ma="Match": INPUT II: CLS
RETURN. I left out the pseudo hex vars for easier
follow through. These two lines are not Intended to
dazzle, but to Illustrate how many IF THEN
conditionals, plus computations, GO SUBS, and LET
statements can be Integrated Into one dense pack
line. Dense pack I Ines are "program packages".
As one gets Into Dense Pack, the program lines
become easier because they are Independent "whole
functions". Fewer GO TOs and GO SUBS are used to
pick up other sub-routf nes, and "fall throughs" to
next program lines are greatly reduced. Sometimes
one tends to get too engrossed and does a blunder
like my printing a listing of the "J-vars utility
package" In the October 87 Issue, Looking back. It
Is a most difficult listing for one to key In. To
give you a better feel for the usefulness of Dense
Pack, one of my programs was reduced from 28K of
program length to about 12K. Then more functions
could be added. All of the Key Words of any
computer can be used as operators for Dense Pack
programming.
RULES. 1. A Key Word can only operate on one
variable within a set of brackets. <G0 TO (a=l)*
100 +(b=l)* 200> would not work, because two
evaluators are used "a and b". 2. ALL conditions
should be accounted for. LET a= (10 AND b=2) +(30
AND b=4). In this example, the conditions of b<2,
b=3, and b>4 are not accounted for. As a line Is
evaluated, and an un-accounted for condition Is
present, the CPU takes off hunting. Often this will
result In the execution of an un-lntended line near
the end of the program. Use llmlters such as "<"
and ">" to account for all possible conditions. 3.
Some mixes of AND and OR within the same brackets
will not be intrepeted In the BOOLEAN sense, but In
the literal. Only experimenting will proof the
programming. Have fun with Dense PacK!
2.8
19
A Practical Study of SYSTEM VARIABLES
Put Them to Use with BASIC
Appendix D of the user manual list the memory
addresses of RAM where most of the TS-2068 System
Variables are stored. The left column "notes" tells
whether the variable number Is larger or s ma 1 1 er
than 255. The significance of this Is that system
variable numbers larger than 255 require two memory
addresses for storage. If the variable Is stored In
two addresses, the formula: PRINT PEEK (low adr) +
256 * PEEK (high address) returns the actual system
variable number. We stared this discussion In the
editorial section. Now let us examine some of the
system varlabi es,
PEEK K STATE and LAST K: These two system vars
are used together by the TS-2068 ROM to read the
keyboard. Then WHY are the vars In RAM? Well, the
codes stored In ROM cannot be changed and a Keyboard
READ requires the ability to store changing codes.
Then how can we use these two system variables?
There are two ways. One Is to construct a little
Machine Code loop routine to use the system vars to
read the keyboard. The other way Is to do it with a
BASIC loop. Why do this when the INKEY$ function Is
already available? The answer Is the INKEY$
t unction does not employ the Debounce and Error
Detection routines In ROM, while K State does.
The following BASIC programming wl 1 1 read the
keyboard and assign the "key struck" to "a$", 150
LET a$="": POKE 23611,220 - 151 IF PEEK 2361K220
THEN GO TO 151 - 152 LET c= PEEK 23560 - 153 IF c<32
THEN GO TO 160 - 154 LET a$=a$+ CHR$ c - 155 POKE
23611,220 - 156 GO TO 151 - 160 STOP, Explanation:
At line 150 we start by Initializing a$, then
RESETING the system var FLAGS, This places the
system In a wait state. Next at line 151 we form a
loop to loop as long as FLAG remains in a wait
state.
When a key Is struck, the error detection and
debounce routine In ROM processes the key value and
If no error exists, the code of the key Is placed at
address 23560, In line 152 we pick up the code
number of the key struck and assign It to var "c".
Then at line 153 we have a ESCAPE so that any non
printable key, such as ENTER, will escape the loop
to process the results. At line 154 the character
key struck Is assigned to a$. Line 155 resets
FLAGS, and then line 156 loops back to another
keyboard scan at line 151, Two more variations of
this PEEK K STATE routine, for PROMPTS In basic are
given In the October Issue of UP-DATE,
The above programming can be reduced to about
three total lines by using chained commands.
Another variation, using the OLIGER SAFE FOR/
counter Is: 150 POKE 23611,220: FOR /65535: IF PEEK
2361 K221 THEN NEXT - 152 LET c== PEEK 23560: POKE
23611,220: IF c<32 THEN GO TO 160 - 153 LET a$=a$+
Cm$ c: NEXT - 160 STOP,
REPDEL and REPPER: Want to perk up your
keyboard and make It frisky? Page 262 of the user
manual gives these two "single byte" system vars.
Play around with POKES to the two addresses to get
variations of the speed of REPEAT KEYS, and the
DELAY between repeat key actions. How about making
the keys Chirp? Do that by POKE to sys var PIP
(23609), Try about 10, Then the sys var DP SZ lets
you enlarge the prompt area at the bottom of the
screen. For kicks, put on a whole screen and then
BREAK and POKE 23659,15, Wow: now the prompt area
Is 15 lines which leaves only 9 lines at topi
OTHER SYSTEM VARS: We will skip some of the
more obvious SYSVARS and deal with some more useful
two byte vars. For these It wl II help to refer to
page 254 of the user manual to visualize the TS-2068
memory map. On page 254, note that PROG Is a line
drawn without a specific address. This is because
the BASIC PROGRAM, which normally begins at address
26710, may be Intentionally changed. The System Var
PROG Is contained in two addresses, 23635 and 23636,
Try PRINT PEEK 23635 + 256 * PEEK 23636, You should
get 23710,
We will now find a nook in memory to stash a
tiny MC Utility to shift the Basic program UP In
RAM, The MC utl llty can go anywhere In RAM, but
lets put It In a most unlikely place. Look on page
255 of the user manual. At the top of the page Is a
group of blocks. All of these are Important places
where "functions" are stored. But one can be used
for multl purpose functions. The "printer buffer"
Is used only for holding data for printing something
to paper with the TS-2040 printer, and Is a Ideal
place to stash Machine code when the TS-2040 printer
Is not to be used.
So, we will do some slick shenanigans, A basic
utility will be constructed that contains a tiny
Machine Code routine. The utility will put It's own
MC routine Into the Print Buff area, and then
Execute it. The result will be a "selective
starting address" of any Basic program to which the
utility Is appended. In simplese, the utility will
move a basic program UP in memory and also move PROG
so that the CPU will know where to go to operate the
Basic program,
2.9
20
A utility that uses System Variables
The following utility really should be !n the EXTRA MEMORY section, because It Is so useful be able
to MOVE a BASIC program to a specific STARTING MEMORY ADDRESS, It Is a take off from the "MOVE" uti Iftles
gfven In the January Issue of UP-DATE, But, we are discussing the use of SYSTEM VARIABLES, and this
utility does a good Job of demonstrating the use of system variables PROG, and VARS, PROG, of course. Is
the starting address of the first byte of the first line of the BASIC PROGRAM. VARS Is the starting
address of the first byte of the variables area. To get a good mind's picture of these two system
variables, refer to page 254, left block. The Basic program normally Is arranged so that It's first byte
starts at address 26710, Then PROG Is 26710, The Variables area (VARS) Is ever moving as the basic
program Is added to by line numbers or changes of programming within the lines.
So, the system variable VARS Is a very Important tool. We can use It to find out the "LAST BYTE" of
a BASIC PROGRAM. Since VARS begins with the "next byte after" the basic program ends, then all we have to
do Is to subtract "1" from VARS (when we find VARS), Now look at page 263 and about 1/3 down we see that
VARS Is given as address 23627, and It Is a 2 byte variable. So <PRINT PEEK 23627 + 256 * PEEK 23628>
will return the memory address where the variables area starts. Then subtract 1 and that will be the TOP
address of the BASIC program. Next, we look on page 263 and find that PROG Is given as a 2 byte variable
starting at Address 23635. Then <PRINT PEEK 23635+256 * PEEK 23636> will return the address of the
STARTING byte of the Basic program. Subtract the product of the two formulas and you have the TOTAL
Number of BYTES of the Basic Program.
It Is useful to be able to re-arrange the Memory Map of the computer when you want to. One need Is
to place a Basic program at the "starting address of a Chunk of memory" when we want to MOVE the program
Into the dock bank. A good discussion on this subject Is In the EXTRA MEMORY section of the January
Issue. Another useful purpose Is to place the Basic program UP In memory to make space for machine code
utilities "under the basic program". This would be useful If operating a program In the dock bank,
because there would be about 4K of wasted space down there when PROG Is moved to Chunk 3. But sometimes
the rationale Is more complex than the act of doing it, so let us get to the action. Since the program
Itself Is a shortle. Mil doublo GpacO'44>e listing and make notes at the side. IMI call the program
"mov" In a REM line so youM I know what Mm referring to.
5 REM "mov" Basic & Vars Memo
ry Management
10 INK 7: BORDER 1: PAPER 1: C
LEAR : LET a=PEEK 2363 5+2 56*PEEK
23636: PRINT "This Basic Progra
m begins at theMemory adr of: ";
a
20 LET b=PEEK 23627+256*PEEK 2
3628: PRINT »"The last byte of t
his Program I sat adr: ";b
30 LET c=b-a: PRINT »"The prog
ram length Is: ";c
40 PRINT »"To Move the Program
UP In MemoryType CONT ENTER": S
TOP
50 INK 7: BORDER 1: PAPER 1: C
LS : INPUT "Input PROG ADR?";pg:
LET a3=pg-a: LET a2=INT (a3/256
): LET a1=a3-(a2*256): RESTORE 5
0: FOR x=23296 TO 23304: READ y:
POKE x,y: NEXT x: RANDOMIZE USR
23296: DATA 33,85, 104, 1 ,a1 ,a2, 1
95,187,18 I
Works AS IS with All Disk and Cassette Systems
Line 10 PEEKS SYS VAR PROG and assigns the address to var a.
Line 20 PEEKS the SYS VAR VARS and subtracts 1 to get the last byte address
of the basic program.
Line 30 assigns the address of the last byte of ram to var c.
Line 40 waits for your decision.
Line 50 will be explained by steps. First an Input Is requested for the
START Address where you want to move the prgram. Your Input address Is
assigned to the var pg.
Next, var a3 Is assigned "pg-a" which Is the total bytes of the move- UP In
memory. The number assigned to a3 wl M next be broken Into the two numbers
to use as POKE addresses for a "two byte" number storage.
Next var a2 will be the "poke number for the high address". Var a1 will be
the number to poke to the low address.
Next Is the RESTORE to Initialize the DATA group later In the same line.
Next Is a counter to place a MC routine In the Print Buffer area. Note
that vars a1 (low adr poke) and a2 (high address poke) are placed In the
data group. This MC program MOVES PROG up In memory to the address that
was INPUT at the beginning of line 50,
The MC program Is a variation of "MOVE PROG" given In the January Issue.
It can be used repeatedly to step a program up In the memory map. Try
Inputs of 30000 first, then 35000, 40000, etc. SAVE It to auto run at line
10.
60 CLEAR
30
0 1
Screen Riles In Springs
^ By: H^Tu^^ -
In January SDU Bill discussed the use of SCREENI files as
a iBeans of conserving RAH in programs such as SiART TEXT.
Each SCREEN*, of course, takes 6912 bytes in disk file
space or two cylinders in SDOS. The following denio listing
shows how up to the laaxiiBura of 704 characters in a
32-colunin text screen such as a menu may be stored in a
string, then printed back on-screen either froia RAH
storage or after retrieval from disk or tape files.
No graphics or UDGs are recognized by the SCREEN* <x,y)
function but this can be used to advantage by having a
subroutine to set up screen borders, etc. then retrieving
screen files and using PRINT OVER 1; a* as many times as
you wish to change the text. PRirff AT x,y; a*(a TO b)
could also be used to alter specific parts of a text
display. It does take awhile to chew away at a screen
initially and put each character in the string, but once
this is done and the file is saved as DATA a*() the access
time is for only one cylinder of disk space. Because only
about 1/10 the access time is required as compared to a
SCREEN* it would even be feasible to sequentially access a
series of such files with tape data storage if RAM
capacity was running short in a lengthy program. Use your
imagination for other applications.
SCREEN STRING DEMO
1 LET P=l
5 DIM A*(784)
18 FOR N=l TO 784
28 PRINT CHR* (RN0*74+48);
38 NEXT N
35 PRINT If8;"0riginal display transfer to A**
48 FOR y=B TO 21
58 FOR H=8 TO 31
68 LET A*(P>=SCREEN* (V,H)
65 LET P^^P+1
78 NEXT H
88 NEXT V
98 CLS
188 PRINT A*;li8;''A* printed from MARS file"
185 PAUSE 188
lie SAVE /"SCREEN* DATA A*()
115 CLEAR
128 PRINT il8;"Re-loading data just saved"
125 LOAD /-SCREEN" DATA A*()
138 LET a*( TO 17)=" "j REM Demo of how b
lank spaces in screen data will not overprint graphics o
r UD6s in border when DVER 1 is used
135 PRirff " BORDER HERE "
148 INPUT PRINT OVER IjAT 8,8iA*;ll8;"A* from disk fil
e to WRS prtout"
158 PAUSE 388
168 STOP
288 REM 60 TO 128 to repeat disk file display
9999 SAVE /"SCREEN" LINE 1
The M/sterious "DEF FN and FN" Functions
One Monday morning at the TImex Literature
Department Mary was given a task that would normally
been assigned to Gus, the Mathematician. Gus had
his usual Monday morning problem. Now Mary majored
In Greek Literature, not Greek Mathematics symbols.
But, never the less, Mary was given the task of
writing the part of Appendix A of the TS-2068 User
Manual to explain such functions as ABS, ACS, ATN,
"DEF FN", and "FN". Thus explains the reason why
many TS-2068 users have not ever used the DEF FN and
FN functions. The User Manual has good prose, but
lacks some In detail.
The two functions DEF FN and FN are used
together like bread and butter to store MATH
FORMULAS In memory and then SOLVE the problems by
INPUT of the missing factor. Take for example the
formula C=PI*D for solving the circumference of a
circle when d (diameter) Is known. To set the
formula Into memory, a line of programming would
define the formula as, DEF FN c(m)=PI*d. Or, to
convert METERS to INCHES, the formula l=39.37*M
would be defined in a program line as, DEF FN
I (m)=39,37*m. The formula Is In the DEF FN
structure, and the SOLUTION Is achieved by using the
FN function, as PRINT FN Km), or LET a= FN Km), to
assign to a variable.
The following little program demonstrates one
way of using the DEF FN and FN functions.
1 REM Using DEF FN and FN
10 PRINT "Convert Meters to Inches"
20 DEF FN I (m)=39,37*m
30 INPUT "Diameter In Meters? ";m
40 PRINT FN I (m)
60 LET d= FN I (m)
70 PRINT "Compute Circumference"
70 DEF FN c(m)= PI *d
80 PRINT FN c(m)
SYNTAX: DEF FN Is followed by a Identifier,
"I "In the first case, and "c" in the second case.
Then the designator letter Is Inclosed (m). This
also can be any letter. On the right side of "="
comes the formula to be solved. The un-known factor
In the formula, "m" In the first case, and "d" In
the second case, are fed Into the formula by INPUT
prompt. Line 40 gets the value computed with the
"PRINT FN Km)", Line 50 demonstrates that the FN
solution may be directly assigned to a variable.
This value of d Is used In the second formula to
compute the circumference of a circle.
The DEF FN formulas may be placed In a I Ine of
= 3.1 ^
programming to be Initialized as one Initializes a
variables table (with GO SUB line #)• The DEF FN
formulas need not be repeated once they are
Inltlllzed. Variable Not Found report will result
If there are Insufficient inputs for the formula to
be solved,
Jack In the Redwoods Heard From
Hello Jack! This SYNX critter Is one thing
we've been a Mookin ferl A way to sneak by the
syntax checker. Now we can put foreign disk syntax
Into a program I Ine, save to cassette and send to a
friend who dont know how to be a dunln It.
Or, how bout changing the syntax In a TS-2068 program to QL Basic, then shipping It out as a ASCII file
TO the QL sitting over on the next table? Heck, some of us may be writing IBM programs on the 2068, Thanks
Jack, weMI find a use for It, Now why did ya disguise It by sayin Its fer AERCO Disk users? Some of us
are but others alnt and It appears that It dont make no difference nohow which kind of disk we're using.
And whl le I gotcha, why dint you mention that you have a lot of good software for the TS-2068, and anybody
can get yore catalog for a Buck, which will be recouped on the first order?
390 Ruther-ford Ave Redwood City, CA 94i36i
FEB. 22, 1988
*♦* SYNX
Jack Dohany
<415) 367-7781
BYNX is a 46-byte relocatable MC routine for AERCO DISC users-
SYNX i5 short for SYNTAX CHECKER SWITCH,
SYNX is given into the public domain.
SYNX allows you to turn off the BASIC syntax checker when
writing or editing BASIC lines... and to turn it back on.
Syntax checking during program execution remains in effect.
Why? Perhaps you want to write a BASIC program that can be used
on a non-AERCO disc system... perhaps on ALL disc systems. You
may want to write a line like this:
500 SAVE *"TEST*': REIi for Zebra disc
Well, you CAN'T write it because it will fail syntax checking.
But with the syntax checker turned OFF, you CAN write it.
SYNX works by changing some locations in the BASIC operating
system... normally in ROM, but in RAM with AERCO DISC. A more
detailed explanation is beyond the scope of this document.
Assuming you have the code on disc or tape as a .BIN or CODE
file, it can be loaded wherever there's no conflict with other
software. Let us say you want to load it at Loc 64000:
CAT "SYNX -bin ",64000 or LOAD "SYNX" CODE 64000 will do it-
To SAVE the code:
MOVE "SYNX. bin ",64000, 46 or SAVE "SYNX" CODE 64000,46
HOW TO USE IT ***
Assuming the code is at 64000:
RANDOMIZE USR 64000 turns syntax checker OFF.
RANDOMIZE USR 64002 turns syntax checker back ON.
Here is the SYNX code as a decimal
into memory however you wish:
64000
64001
64002
64003
64004
64005
64006
64007
64008
64009
listing, ready to be poked
24
64010
255
64020
24
64030
255
64040
0
27
64011
0
64021
221
64031
1
64041
243
24
64012
0
64022
197
64032
4
64042
237
18
64013
205
64023
225
64033
0
64043
1 76
0
64014
13
64024
1
64034
9
64044
251
0
64015
13
64025
1 1
64035
17
64045
201
0
64016
253
64026
0
64036
76
253
64017
54
64027
24
64037
14
54
64018
0
64028
5
64038
1
0
64019
255
64029
197
64039
9
the silly computer
Of course, if you get a single number wrong,
is likely to crash when you attempt to use SYNX. So, . - SAVE
before testing.
f* END
23
A REVIEW OF a Aerco FD-68 Utilities Program Disk
By: Syd Wyncoop
This is a nifty set of disk utilities for the
Aerco FD-68, by Ch i a-Ch i Chao. The program "Disk
File Manager" will be reviewed. This program
allows individual files to be copied, singlely or in
groups, instead of the entire disk, as in the
familiar Aerco command, <MOVE "A:=B:",>. Other
functions: normal disk catalog: ..detailed disk
catalog, which shows track and sector information:
..listing of occupied tracks on the disk:
..checking disk for bad sectors.
Having the abi 1 i ty to copy individual files is
obviously very handy and has several less obvious
side benefits. These additional benefits could all
be grouped as one, more efficient disk operation.
As you use a disk, after many read/write operations,
there are lots of » reel aimed* sectors lurking about
and » holes' in the directory tracks. When you copy
Individual files onto a freshly formatted disk, the
files are placed on the disk in consecutive sectors
and the directory does not contain any erased
entries. This greatly speeds disk access and
loading, particularly as file size increases. The
Aerco disk copy function does just that, it copies
all disk information to the new disk. This is very
useful for debugging and/or recovery of a 'trashed*
jisk. You should always attempt direct disk writes,
such as recovery, from a copy, NOT the original
disk.
The detailed disk directory function provides
you with the information contained in the directory
which is usually not available to you. This is
autostart line numbers, starting addresses, as well
as track and sector information. This is si mi liar to
reading a tape header. You can use the track/sector
information to see how disorganized the disk is.
Listing the occupied tracks also gives some
indication of disk disorganization and how full the
disk is. Also, as above, this information is useful
for debugging and recovery purposes. Best of all,
this information can be redirected to a printer,
either the TS2040 or an 80 column printer! From my
perspective, the check disk option has one serious
drawback. It should have been a non-destructive
test. As it stands, you must test all disks prior to
use, as all data will be destroyed by the disk
check. This is because the disk check effectively
re-formats the disk. 1 should clarify, the disk
check works fine. However, since I have encountered
only about 6 bad disks in a library of over 700, I
see little need to check them. Therefore, 1 usually
yait until a problem occurs, at which time I want a
non-destructive disk check. This is not bright on my
24
Articles and Reviewsjj^
April 1988
part (and frustrating when a problem does develope)
but it is easier and has proven to be effective.
As a bonus, the disk contained a nice Boot.Bas
file loader program. You use the (mouse?) arrow
keys to point to the f i le you wish to load. Autorun
Basic programs may be loaded with or without
autorunning them. Disk File Manager should be
considered a very useful addition to your library of
Aerco utilities. It is easy to use and it works!
Ed note: Disk File Manager ($13.00) is
available from CHAI-CHI CHAO, 73 Su 1 1 i van Dr i ve,
Moraga, CA 94556-1209. Chai-Chi has several other
Aerco FD-68 utilities, all i nexpens ivel y priced.
Send SASE for product I ist.
A Universal Treatment for Bugs In the Program Area
I want to call your attention to John Ollger's
article (see "Problems in using the new V2,4 MERGE
ODrrwand"), because It has universal application.
The scenario Is, a Basic program picks up garbage
that Is stuck within the program space that it
occupies In memory (PROG to VARS). It's kinda like
one walking through the woods and not realizing that
chlggers are finding a warm bod to Invade, Junk
stuck In the program area Is just as hard to get rid
of as them pesky chlggers. You can't see urn and
they're stuck like they're a piece of ya.
When you SAVE a Bas I c program that contains
Junk (chlggers) the Junk SAVES right along with the
program (at least chlggers eventual I y d le). How
does Junk invade a Basic program? Well, one way Is
via a "bad load", where a loading error occurs after
some, or all of a program has loaded. You've seen
this In program loads that aborted, and when you try
LISTIng the program. It scrolls and scrolls with a
screen full of question marks. Thats J unk
(chlggers), pardner, and the whole mess Is In the
program area of memory. The computer Is trying to
list the program but the last program line contains
Junk that extends all the way up to the end of
memory and the systems vars VARS has not been set.
Of course such a gross Invasion of the program area
by bugs fi cannot easi ly be recovered from.
What John Is talking about In his article Is a
"lesser Invasion", klnda like Intestinal parasites.
The program lives and the patient might not even
know that they're In there. Funny how a program can
live a normal life while hosting such parasites
Indefinitely, But eventually there comes a time
when the buggers are detected. In this case they
were discovered when someone tried to MERGE to the
space where the critters had set up housekeeping,
John gives us a very useful procedure to rid a
program of bugs that have Invaded the program area.
Mm highlighting It here because It has universal
usage. Now there are many different kinds of bugs.
Sometimes you can get rid of urn with RAID and other
times you have to take somethln fer It, In this
case John shows us how to cut urn out. Disgusting,
them parasites, eh? 2 6
Book Review: Dick F. Wagner
Title: Epson, Epson, Read All About It!
Authors: Julie Knott «c Dave Prochnow
Price: *14.95
I-D. ISBN 0-201-11640-5
Publisher: Addi son-Wesl ey Publishing Co. Inc.
Pages: 275 Dates 1985
The authors have developed a guide for Epson and Epson
work-alike Ccompatabl e) dot matrix printers that provides the
user with more information on printer applications than most
manuals give. Where printer manuals often devote a part page on
each printer code and sometimes a program to explain its
operation, these authors provide uses and application programs.
This book explains such mundain things as the proper way to
load in the paper, discusses interfaces, explains what happens
on printer initialization, how to program for different
computers, and many other pertinent subjects- Within each
chapter a table of new function codes used in that chapter is
presented. This table shows the CHR* codes and the ASCII codes
corresponding to each action. LPRINT and CHR* codes are used in
all examples
The book is divides into 4 parts and 11 chapters as
follows:
Chapter 1: Printing with dots
Part 1: Selecting printers and connecting to computers
Viewing the printer field
Joining of computer and printer
Part 2: Epson printer capabilities
Character pitch
Character sets
Downloadable ?t custom characters
Part 3s Epson dot graphics
Plot graphics
Print head placement
Programmable Graphics
Part 4s Patching software and hardware to Epson
Installing software
Joining hardware
Appendicies: Function codes
ASCII codes
Dip switch summary
Character style chart
Epson work-alike conversion chart
Some interesting programs given include a printer test,
typewri ter Cpr int as you type), print out the International
character sets, print double height characters, design print
fonts, design custom graphics, setting margins, horizontal and
verticle tabs, graphic line designs, circles, pie chart, and a
program COMAKER) to create graphics in any of seven graphic
modes. There are various short demonstration programs for
speci fic control codes. Progragms are in MBASIC and duplicated
in Applesoft BASIC but are easy to convert to Sinclair BASIC-
Screen dumps are not covered.
One subject not not discussed but important to some
computers is how to cancel an unwanted line feed caused by the
computer cable connection and software. The secret is to
disconnect the printer pin 14 cable which eliminates the AFXT
low signal- In some cases the dip switch does not seem to
control the line feed.
About 70 pages are devoted to various appendicies. An
interesting table covers the function codes used by Epson and
compares codes for C. Itoh 8510BP and 8510SCP, Olivetti PR2300,
and Star Micronics Gemini lOX printers- Character shapes used by
these printers plus Epson FX, LQ, RX, and MX models are given-
While Part 4 would be the least useful part of the book, it
does give some interesting details on specific products not
useful to TS users. The reader can compare word processors
available to TS users with a few used with other computers- Ours
seem to be very comparable to the big name programs- About 70
pages are devoted to this subject.
Soft back and ample margins make this book easy to use at
the computer. This is the only reference book I have seen
devoted to Epson and work alike printers.
25
Oliger Disk Section
April 1988
PROBLEMS IN USING THE NEW V2.4 "MERGE" COMMAND
It has come to my attention that several JLO SAFE users have been having some
-rouble using the new SAFE "MERGE" command under certain conditions. This note will
detail the results of my investigation into this problem, as requested by several
Oliger Disk System owners.
I have had reports from a few users that indicated a problem may exist in SAFE
causing the MERGE command to sometimes not work. The users reported that SAFE would
act like it had MERGED the Basic code, return with an "OK" report, but when they
would LIST to look at the additional code it would simply not be there. Repeated
attempts to MERGE the BASIC into the same program would give the same result.
However, \dien asked for a sample disk that contained the programs that resisted
MERGE, nobody could provide me with the sample for one reason or another. Repeated
attempts to cause the problem myself would always fail. I couldn't get . it NOT to
work!
Finally one customer called with a report of the problem, and he had it doing it
right then, before our very eyes (and ears)! He told me he would make a copy of the
disk having the problem and get it off to me to work with.
I recieved the disk and quickly went to work. The main program on the disk
contained Bill Jone's (are you listening Bill?) "SMART DAISY" Basic program, and the
Basic code to MERGE was a ten line or so eprom programming subroutine that started
at line 9980. The last line in SMART DAISY was line 9520. I loaded the main program
and then tried to merge the programming subroutine. As reported, the drive and SAFE
ACTED like it had been merged but I sure couldn't see it there!
Further investigation found that I could not get a good merge after Smart Daisy
was loaded even after the CLEAR command was used and even when Smart Daisy itself
was removed using the DELETE , command!!! I foxind that <PRINT FREE> would return
only 38289 bytes free after SMART DAISY had been loaded and then removed with CLEAR
and DELETE , but on power up before any loads the computer had 38652 bytes free. I
had somehow LOST 363 bytes of memory by loading SMART DAISY and then getting rid of
it!
After running HOT Z AROS to find out just what was going on, I found that the
pointers to the variables area and program area were not the same as they are when
the computer is first powered up. Looking at where the computer thought the program
was showed a lot of gibberish and portions of one of the screen copy routines used
on the cassette supplied with the Oliger Printer Interface.
I checked out several copies of Bill Jone's SMART TEXT and found that EVERY ONE
of them from the very first was missing those same 363 bytes. They ALL had the same
gibberish where there should have been program lines at the end of the basic.
Evidently somewhere along the line (very early) Bill's program had been
corrupted, either through glich, cassette data error, stray POKE(s), or whatever.
The MERGED code is actually there, but Basic can't find it to LIST or RUN because
the gibberish before it in memory confuses it.
Although all of Bill's Smart Text series programs seem to have this same
corruption, there are likely to be other programs found that are also like this.
Because of the way Basic programs are stored, saved, and loaded on the 2068, once
something like this occurs and the program re-saved (using either cassette or disk),
it will forever exist because as far as the computer is concerned it IS a part of
the Basic program, even though it can't use it or LIST it.
26
5
I hope I haven't bored everyone to sleep by now. I*ve attempted to go through
the entire process of how I try to resolve a problem like this reported to me.
Sometimes I beat my head against the wall all day long and never get a problem
solved. If you have a real strange problem with a certain command or function in
SAFE just some of the time^ PLEASE put it on disk as a sample and send it with your
letter. It can REALLY be a big help!
So, how do you know if a program has this problem? If you cannot use the SAFE
MERGE command with it then it is very likely. But the REAL test is to use the
command <PRINT FREE> immediately after power up and again after the program is
loaded and the removed using <CLEAR :DELETE If the numbers don't match you can
be fairly certain that the program does contain corruption (unless it had self-rtin
and used the CLEAR N command). I will now detail step by step how to fix this:
1) FIND AMOUNT OF PROGRAM MEMORY CORRUPTED:
A) Write down result of the statement <PRINT FREE> immediately after computer
power-up. (38652 on standard 2068 w/o any cartridges installed)
B) Load corrupted program. Save variables to disk with the command <SAVE /"vars"
VAL>. Clear both program and variables from the computer with the command line
<CLEAR :DELETE Now write down result of the statement <PRINT FREE>. (38289 for
Smart Text)
C) Siibtract the number written down in 1B above from the niimber written down in
1A. Write this number down. (363 for Smart Text) This is the amount of memory
corrupted.
2) FIND CORRECTED BASIC VARIABLES POINTER:
A) Re-load corrupted program and remove the variables again with the <CLEAR>
command.
B) Enter the command <PRINT PEEK 23627+ PEEK 23628*256>. Write down this
number.
C) Subtract the number obtained in 1C frcxa the number you just wrote down in 2B.
Write down the result.
3) FIND NEW VALUES TO POKE?
A) Divide the number obtained in 2C by 256. Round down to the next whole number
and write this down. (MSB)
B) Multiply th^ number just written down in 3 A by 256. Subtract this product
from the number obtained in 2C. Write down the result. (LSB)
4) SET THE VARIABLES POINTER CORECTLY AND CLEAR THE CORRUPTION:
A) Set the variables pointer with the command <POKE 23627, LSB: POKE 23628 ,MSB>
with "LSB" and "MSB" replaced by the numbers written down in 2B and 2 A
respectively.
B) Clear the corrupted memory by using the <CLEAR> command again.
5) GET IT ALL BACK ON DISK:
A) Re-load back in the old variables with the command <L07UD /"vars" VAL>.
B) Re-save the repaired file with the regular <SAVE /"Filename" > command.
The "cleaned-up" prograia should now allow MERGE to operate and be shorter to
boot I
John L. Oliger 2/88
27
SAFE QUESTIONS ANV ANSWERS
6
Thi6 column will anmzft qu(L6tlon6 gzntml IntzKdit about thz Ollg<Ln. 2068
Vl6k I IV and JLO SAFE VOS. you havt qut6tlon6 you itzZ othzK u6^^6 o^ thl6
6y6im wouZd llkz io 4ee anmtn.zd, 6znd tkm to me at: 11601 Whldbay Vn,.
CumbzKland, IN 46229. Btcjau6Z my ^(ihtduld can at tam6 be limply too dmindlng
to almy6 \lnd tht tlmz, I cannot pKoml6c to ALWAYS have thl6 column Kcady ion.
eac/i nm l66uc o^ Sa^e Vlik Up-date. I u)lll only do the bc6t I can... <
What is the latest version of SAFE and what new features does it provide?
The current version of SAFE as of today (1/25/88) is V2.41. The last commands
added to SAFE were the MERGE command, the SAVE //"Filename" command, and the NMI
"N"EW key function. The MERGE command is a simplified but very fast merge that
appends additional Basic code and variables onto an existing Basic program. The
SAVE //"filename" command is an alternate method of saving to disk that
by-passes the "FILE EXISTS!! 5 SECONDS TO ABORT" warning message* It is intended
for use where a file overwrite is expected and the delays caused by the warning
message are not desired. The NMI "N" key function allows a complete reset of the
computer very easily w/o having to turn off yotir computer. It is like adding a
reset switch without physically installing the hardware.
How much does it cost to update my SAFE V2 eprom?
I charge $5.00 if you return a SAFE eprom to be recycled or $10.00 if you do
not. This is for all lawful owners of SAFE V2. SAFE V1 owners can upgrade to the
latest SAFE V2 by sending $10.00 in addition to the above. This is a one time
payment for the V2 software. I feel the $5.00 or $10.00 is about the cost for
post/pack/handling and possibly the cost of another eprom. Thus, once you have
SAFE V2, you are NOT charged for it again. All prices listed above include
postage. If you wish defaults of other than 40 track, double sided, 6ms head
step, ASCII COPY /, then you need to specify when ordering.
I own the Oliger 2068 Disk Interface W/JLO SAFE and use an AERCO printer
interface with the Olivetti PR2300 ink jet printer. I have tried to use the
built in SAFE printer driver and screen copy routines with my set-up without
success. Can you help?
The Olivetti PR2300 printer and Aerco printer interface, used together, are NOT
directly compatible with the printer driver and screen copy routines built into
SAFE. The Oliger 2068 Printer I/F and Olivetti or most other combinations of
Aerco I/F and printer work without a hitch. The trouble with the
Olivetti/Aerco/Oliger Printer driver combination is caused by the way the Aerco
I/F itself requires the software to finish toggling the printer's STROBE NOT
line by reading the port again immediately after writing something to it, which
the Oliger software does not do. The Oliger I/F does not require the software
STROBE NOT read toggle. The fix for this is a simple modification to the Aerco
I/F board itself, which will make it self-toggle and as such cause it to work
with any combination of driver/printer you may have*
To perform this modification to your Aerco Printer I/F:
28
-7,
1) Cut the pc board trace going to pin 11 of the 74LS10 chip, right by pin 11.
2) Install a jumper wire from the 74LS10 pin 11 to the 74LS02 pin 5.
I have the latest version of SAFE (V2*41) and find that sometimes the new
"N"ew NMI reset fxinction does not work, but other times it does. It seems it
usually won't work after it has previously been used. Is something wrong with my
board or new SAFE eprom?
There is nothing at all wrong with your hardware or firmware. This is just a
peculiarity in using this function in the way the hardware is designed. It is
caused by holding the NMI button down too long when pressing it for the new
reset. The correct procedure for using the new reset function is to hold down
the "N" key and then to give the NMI button a short press (just a tap) to cause
the reset. If the NMI button is held too long, the reset function will simply
not work the next time it is tried, unless an error or anything that activates
SAFE happens before then. When "locked-out" like this, no harm other than it not
working again will occur.
After a <BREAK> key press during disk operations, I find the only way to get
back to default settings is to turn both the 2068 and disk drive off then back
on again. We need a way to clear SAFE and anything the 1770 is doing without
losing everything. Any ideas?
You're assuming incorrectly here. If you BREAK during a disk operation and a
return to Basic is made, SAFE has already taken care of all this as much as it
canl SAFE is in good shape to do whatever you want, and has sent a command to
the 1770 disk controller to abort whatever it is doing. What you are seing
happen is that the 1770 chip itself HAS stopped everything it was doing, EXCEPT
that it will keep the drive motor turned on imtil it sees several rotations of
the disk. If the drive selected does not contain a disk or has its door open,
the 1770 will leave the motor on forever because it hasn't seen the disk turn
its allotted number of times. Ml you need to do is insert ANY disk into the
drive or use the <LET /D=n> command to select a drive that IS on-line with a
disk installed. Then the 1770 will see the disk turn a few times and stop the
motor. Any write operations you might have started and broke into WILL NOT OCCUR
because SAFE aborted them and told the 1770 to abort too. ALL disk systems that
use the motor control function of the 1770 have this same quirk, because this is
how the 1770 itself does it. There is NO software command to stop the motor,
just let it see the disk turn and it will stop itself I
I get occasional "TOOTS" when using the MOVE/ command within a Basic
program, but I don't seem to when I use it in direct mode. It appears to toot
when the so\irce light is on, as if SAFE is trying to read before the head has
fully settled. What's wrong?
Your disk set up is marginal if you get these warning toots, period. Try
relocating your drives and/or rerouting the disk controller cable. If you tried
the slowest head step speed and it STILL does this, then the problem is NOT in
SAFE trying before it should. Most problems of this sort are fo\md to be caused
by interference and are usually cured by rearranging the drive and cable's
placement. The problem occurring within a program rather than in immediate mode
is coincidental. SAFE has no idea if the statement is immediate or within a
29
8
program and the exact same code is executed either way. More likely you do the
move more often using the program you mention so the odds of the error occuring
is greater-
You say SAFE will allow from 10 to 255 tracks per side of the disk? What
kind of drive, if any, allows more than 82 tracks per side?
None of them do, at least right now. But if tomorrow the drive manufacturers
doubled the amount of tracks allowed per side from 80 to 160, SAFE would be able
to use the extra space immediately! It happened before when they went from 40
track to 80 track drives. It is VERY possible it will happen again in the future
as drive manufacturers become better at making the disk stepper motors and
heads. As far as I know, SAFE is the ONLY DOS around that is flexible enough to
allow this. Most others would require substantial revisions if it would be
possible at all I
I see no real benefit in having the variables load in along with the MERGEd
program, and I think it would be better if the LOAD /"name" VAL command cleared
out the old variables before loading in the new. Any comments on this?
Because of the way MERGE was added to the SAFE code in the eprom, and because a
regular Basic program DOES contain variables in a normal SAVE on the 2068, it
used MUCH less eprom code space to have MERGE load in the variables too, rather
than just the program. Any subroutine saved to disk to later be merged into a
master program should have its variables removed by using the CLEAR command
before saving to disk, unless these variables will be needed by the main
program. The reason LOAD /"name" VAL doesn't erase existing variables is to make
the command more flexible. Use can always CLEAR and the load a VAL type file to
get only the new variables the way it was implemented. If it always cleared the
old variables you would HAVE NO CHOICE and flags used by a running program that
might be needed would be lost.
SAFE supports several different printers with its COPY/ command. I feel that
we don't need several different copy routines, but only one. Why don't you
remove these routines to open up more code space to inclement new commands?
Most users of this disk interface feel that only one or maybe two of the
several copy routines are needed in SAFE. Only trouble is, each feels that the
one that supports his printer is the one that's needed, not the other. The next
guy thinks it should be a different one. It would be much too complex to install
a different copy routine in each different SAFE eprcan I program. This would
waste more time than if I devoted the same energy to making portions of the code
more efficient and opened up a little room this way. The s±ts^le fact is that
most people LIKE the ease of using the COPY / command or the NMI copy function.
I do nyselfl If I took it out, I feel there would be a definite loss...
What is the purpose of the slide switch (SWI) right next to the NMI button
on Disk Board B? Only reference I have come across is step 5 on page 4 of the
Oliger Disk I/F User's Manual.
This switch is only on the "REV A" disk board B. It was intended to be used to
switch between the two 8K "halfs" of a 27128 eprom. The idea was to have my own
JLO SAFE DOS on one half (active when switched in the right "SA" position) of a
27128 eprom and Ray Kingsley's OKDOS (active when switched to the left "OK"
position) in the other half. If switched into SAFE from OKDOS, you were to use
the RESTORE /S command to initialise SAFE without a reset. Ray was going to have
a similar command to initialise OKDOS when going from SAFE. Only trouble with
all this is that Ray never did finish his OKDOS, and its been a year and a half
since I've heard from Ray at all. I am sure now we will NEVER get a complete
OKDOS f rem RAY, which is really a shame because he had most of the core of the
DOS complete, needing only to tie in the DOS to Basic. Oh well, we all go on. I
believe Ray didn't think he would get back financially what he would have needed
to put into the DOS in his time, to make it worthwhile. He may NOT have...
30
SAFE BUGS that are not BUGS- ed
Seems that I have a blank page to fill, so will
give this gem to the SAFE SDOS section. Ole John
must dread getting letters from my house, but he's
right prompt on answering them. Some of the
questions that he has answered In this section came
from you know who. And you know what? John does
have answers! The rest of this will outline a
problem that 80 track disk user may have encountered
as i did. What happend was, I got a Dlskf back that
had several files gl Itched up. Checking the balance
of my pre-recorded disks, I found all of the 40
track disks were OK, but ALL of the 80 track disks
had the same gl Itched files. Now that aint good for
me reputation! Thankfully only one of them 80 track
buggers had been sent out. This sneaky bug only
occurs when the 80 track disk "Is more than half
filled".
I got my ^tester 80 track disk out and began to
copy It. Now my drive set up Is Three 80 Track
disks as drive 0, 1, and 2, with a 40 track as drive
3. So It Is easy to use drive 0 and 1 for copying
with the MOVE/ function. How do I copy 40 track
disks? Well I Just remove the DATA cable from the
SAFE controller, and plug on the data cable of
another drive system that has 4 40 track drives and
use MOVE/.
But, using the Master 80 track disk, the first
MOVE/ resulted In the same files being glltched.
Funny thing, when I LOADED a program from the Master
disk and did this number: LET/d=1 : SAVE/"tl tie", the
warning toot would sound, then the program would
SAVE A-OK. So, your scribe did MANUAL transfers of
programs to about 10 disks. Ah Ha! I f Iggers, I got
ole John now! So I packed up a copy of the master
and a glltched up disk and sent them off to him.
John's reply came bouncing back. Now Mil quote:
1. The trouble you are having with MOVE/ is
caused by how this command Itself works. MOVE/ Is a
carry over from SAFE VI. It depends upon the Number
of Tracks to be MOVED and the Number of Sides to be
MOVED "as set with the LET/t=n and LET/s=^n
commands". The MOVE/ Is using the DEFAULT value of
40 as Is set In the SAFE EPROM. So, It Is moving
only the first 40 tracks to the destination drive.
But, the entire Catalog, and the Pointers are being
moved "because they are stored on track zero". But
the DATA that Is being pointed to will not be there
after track 40.
2. The cure Is easy. Just preceed your MOVE/
command with LET/t=80 when MOVING/ between your 80
track drives. You can think of the MOVE/ command as
being dumb because you have to tell it to disregard
the default parameters (40 track and 2 sides), while
MOVE/"flle name" Is smart and can figure this out.
I need to explain this better when I revise the
. 9
manual. END QUOTE,
Durn! I thought I had him! But ain't John
nice? He could have just told me I was dumb Instead
of saying his MOVE/ was dumb. Oh well I Funny thing
Is, I had made a DISK COPY program that repeatedly
uses MOVE/ to copy disks between any track
combination of drives AND l INCLUDED the LET/t= and
LET/s= comnands. Then when doing the MOVE/ In the
direct mode the LET/ was left out. I didn't think I
needed the LET when operating with two drives having
te same number of tracks.
I have some more space to f I li so wl II do It
with programming. Here Is a way of using the disk
catalog as a MENU to select a program to load. <100
CAT/: INPUT "Key In TITLE of Basic Program";a$:
L0AD/a$ >. You can embellish this with optional
selection of a different drive, as: 100 INPUT "Enter
drive number";a: LET/d=a: CAT : INPUT "<1> Basic or
<2> Code Program?";b: INPUT "Enter Title bnly";a$:
If b=1 THEN LOAD/a$ > <110 IF b=2 THEN LOAD/a$ CODE:
GO TO menu >, In both examples, a INPUT prompt Is
printed to the Catalog Screen at the bottom area and
you are using the catalog data for Information.
Here's another bug that ain't a bug. Quite
often I'll FORMAT a 40 track disk to 41 tracks In
order to cram more programs or data Into the disk.
Once I tried MOVE/ to copy such ad Isk^ and It
didn't work. The reason was that the destination
disk was formatted to 40 track. Thats like trying
to walk on two straight I Ines at the same time.
Incidentally, you CAN FORMAT a 40 track disk to more
than 42 tracks , say 50. The d I sk d I rectory w 1 1 1
show the Dl SK FREE space as If you have 50 tracks ,
but the figure will be erroneous. All that I have
ever been able to stuff Into a 40 track disk Is the
contents of 42 tracks. The diskette manufacturers
only guarantee the space for 40 tracks. On 80 track
disks one can usually format 82 tracks (80
guaranteed). The practice of formatting extra
tracks Isn't advised because the read — write head
Is extending beyond the disk drive mechanical range
as well. 41 and 82 might be safe enough^ but beyond
that Is pushing It for a little bit more data space.
Why not wait unti I one of them new 250 track d Isks
comes out. Then we can use the range of SAFE that
John provided, though the disk capabl llty did not
exist.
31
TS-2068 COMPOTING WITH LARKEN DISK *****
BY LARRY KENNY
** LKDOS Language Discussions
** Questions and Answers
** Machine Code Routines
** Ram Disk
** Integrating Disk Drive Syste
32
1
The LARKEN DISK Section
Mr. Larry Kenny, RR-2, Navan, Ontario, Canada K4B 1H9, is
the owner of LARKEN ELECTRONICS. Larry is an Engineer and has
developed the Larken Disk Drive System for the TS-2068. Other
significant developments by Larken is the abbreviated Disk
Driver Cartridge which interfaces to other Disk drive system.
This is called "The LKDOS Cartridge" and it provides a "Dual
DOS" when used with either the Oliger SAFE or the Aerco Fu-68
disk drive controllers. One more significant development by
Larry is the Larken RAM DISK, an extra memory device which
"acts as a disk drive" for storage of data.
Larken Electonics is one of our most valuable Cottage
Industry supporters of the TS-2068 and we need Larry to
continue to develop the hardware additions that only an
engineer who knows the TS-2068 can provide. This section in
UP-DATE is devoted to providing information about the Larken
Disk System(s) in the same manner as we provide the section
titled "Computing with SDOS, by John Oliger. These two
Cottage Industries, The Oliger Co., and Larken Electronics,
form the nucleus of our TS-2068 Disk Systems support because
of their continuing up-dates of their systems and their
constant quest to produce new and inovative hardware systems.
This section is provided as a forum to support all
aspects of the Larken Electronics system users. Larry has
promised his inputs, and already UP-DATE has had outstanding
article support by two avid Larken Disk users, George Chambers
and Bob Mitchell. The more who joins in, the better the
support. The Larken Disk systems began late, after two others
had quit, leaving the users without support (see orphans).
Just now, the TS-2068 users are finding out about what Larken
Disk has to offer, to both the first time disk user and to
users of other disk systems who want a inexpensive "second
DOS".
Accessing LKDOS from Mcxchine Code by Larry Kenny
The clos is easy to access -from machine code using the internal
jump table starting at address 120 in the cartridge.
The jump table is a list o-f 20 or so entry points to the most
often used sub-routines in the dos.
Any changes or di-f-ferent versions of the dos in the future, do
not affect these addresses, so utility programs dont need to be
modified incase a different version of Lkdos is ever used.
Any machine code program (or Bcisic program) written for Lkdos
is compatible with any Lkdos cartridge useing a different disk
interface, (Aerco, RameM or Oliger).
The routines can be used to load or save complete files or
just load or save 1 block etc.
A complete list of all the Subroutines and variables in the
Lkdos is supplied with the Disk Editor package. (*10.00)
Note -all numbers in the programs below are in decimal
Two Small Utility Programs for LKDDS **********
— Addresses and dos routines used by FREEBL and MOVCAT
data EQU 8328 - Address of data in the disk buffer
curtrk EQU 8221 ~ block number for TRACK to seek
— Commonly used subroutines in the Lkdos jump table
SAVEBF EQU 120 - Save the buffer to current block
LOADBF EQU 123 - Load the buffer from the cur block
TRACK EQU 126 - Restore to track 0 the seek (curtrk)
FREE BLOCKS
This routine allows you to find the number of free blocks with
out displaying the catalog.
It will return the number of free blocks in the BC register,
so it can be accessed from basic with PRINT USR FREEBL or
LET K=USR FREEBL .
34
3
000.10
00020
00030
00040
00050
00060
00070
00080
00090
00100
001 10
00 1 20
001 30
00 1 A 0
00150
00 1 60
00170
00180
00 1 90
00200
FREEBL D:C
CALL 98
LD A,0
LD (curtrk) ,A
CALL TRACK
CALL LOADBF
USED
Exr
RET
LD C,0
LD HL,data
INC HL
LD A, (HL)
W 1
JR Z,EX:[T
CP 245
JR 2, USED
INC C
JR USED
LD B,0
LD A, (98)
EI
turn on the Lkdos cartridge
move the disk drive to
block 0 (side 0 track 0)
load disk to bu-ffer
set counter to 0
set HL to start of track -map
first block always used c^nyway
255 marker means 'end of track-map
if so then exit
245 marker means 'block used'
if used then move on to next one
must be a free block, update count
continue searching for free blocks
turn cartridge off
MOVE CATALOG to UPF='ER RAM
This routine loads the catalog from the disk, and then
moves it from the dos ram to address 50000 where you can
search or examine it from basic.
00010 MOVCAT DI
00020
00030
00040
00050
00060
00070
00080
00090
00100
00 1 1 0
00120
00130
CALL 98
LD A,0
LD (curtrk) , A
CALL TRACK
CALL LOADBF
LD HL,data
LD DE , 50000
LD BC,5090
LDIR
LD A, (98)
EI
turn on cartridge
move the drive head to
block O
1 oad d i sk to buf f er
move the catalog
up to high memory
turn off the cartridge
RET
35
***** THE DISK DRIVE ORPHANAGE ****
FEATURING
THE RAMEX MILLENIA K AND TIMEX OF PORTUGAL
DISK DRIVE SYSTEMS
"Let US feed the good Orphans"
36
1
The Hungry Orphans
There are two TS-2068 Disk Drive Systems that are still
in use despite the fact the their manufacturers have
discontinued support of the systems. These are The RAMEX
MILLENIA and the TIMEX of PORTUGUAL Disk drive systems.
Information sources for these disk drive systems are scarce
and are drying up as time goes by.
UP-DATE will publish every bit of information about these
"orphan" disk drive systems that we can lay our hands on^
because few articles can be found in other publications to
support the users. To make space for supporting these systems
we will go to a small print that may not be comfortable
reading. We want INFORMATION VOLUME about these systems. The
users will appreciate that more than they will "scarcity but
larger print". Take a tip- each of the pages will "blow up"
to exactly four pages of letter size paper that can be cut for
a notebook. Any copy shop can do that for you for about a
dime a page.
As is the case in this issue f much of the programming
given in "Disk Specific" articles consists of useful routines
that are adaptable to all other disk systems and cassette use,
when one sifts out the disk syntax. So, all other TS-2068
users BE ALERT and dig out your binoculars to catch the
universally usable programming.
UP-DATE invites all inputs to the "Orphanage Disk"
section by clubs and individuals who want to help keep these
systems alive. In particular, the users need information
about REPAIR SOURCES. They also need EXCHANGE of PROGRAMS.
ALL useful information received will be published (albiet,
small type). Input articles should be on letter size pages
and typed in ordinary PICA 10 CPI type, which will be reduced
to what you see in the next pages. The goal is MAXIMUM
INFORMATION!
This issue of UP-DATE presents a good source for RAMEX
(SPDOS) information in Munson Cookayne. Munson is also a
source for software. So you can think of the package of
articles by Munson as being dual purpose, FREE information and
Source information. Viva la RAMEX Users!! Viva la TOS Disk
Users!! Both groups contribute to Viva la TS-2068 Users!!
37
2
A LITTLE ABOUT ME
by: Munson H. Cockayne, Jr. BSCS
Well you know my name but can you pronounce it? The last
name is pronounced like "cocaine". It seems that in middle
English "coc" was pronounced "coe" (long O) as is witnessed by
the liqueur known as "Coo's" that is still popular in England.
Enough about that.
I am a native Floridian, second generation. I have written
several articles and letters for TDM, SPDOS SURF, and now TS
2068 UPDATE. Among my credentials is a BS in Computer Science
and I am working on my MS at present. You may or may not have
heard of the University of Central Florida (a state university)
but that is where I go to school and offers one of the two PHD
programs in Computer Science in the Southeast. Being a graduate
of this program is my long term goal.
My first computer is a ZX81 kit that I got by mail order.
Putting that one together and seeing it work really got me
started on a new career. I never thought that I would become a
computer scientist simply because of project kiti
Some of you have bought software and hardware from the
small company my brother, Robert, and I run. It is called
K, I. S. S. /computers. There are three (even smaller) divisions:
1) K. I. S, S. /softstuff (software).
2) K. I.S. S./hardstuff (hardware).
3) K. I.S. S. /research (from whence the hardware
and software come).
Most of the money earned goes to the third department to keep
the TS line alive and thereby keep our business going. It makes
sense to us and is a great source of fun. Yes, some people
derive fun from painstaking work. We seek to fill the niches
too small for the "big guys" to get into (not enough profit).
Computers are a big part of my life but my mainstay in life
is my family. My wife, Chee, is everything I always thought a
wife would be and then some. Our three children (Tina, Sandi and
Trey) delight us with their oompany.
My philosophy is simply, "Life is an adverture. Make it the
best sort for yourself and any you meet along the way. " I am
sure that there are many of you with essentially the same
philosophy. My favorite catch phrase is "Keep It Simple Stupid!
I hope that was brief enough to keep you from going to
sleep. Bill promised that he would edit it for me.
SHELL
by: Munson H. Cockayne, Jr. BSCS
I am sure that some of you read my article on this subject
in TDM but I am also sure that you will find this expansion of
the concept a useful one. The listing in this article is a
•shell'. It allows you to COPY or ERASE any or all of the files
on a disk.
Let me pause to define the term 'shell'. A shell is a wrap
around the Disk Operating System, DOS, just like a clam's shell
wraps around it. Only, in this case, the shell not only hides
the contents, but it also makes the contents simpler to use.
Now for the program, the first part asks you what you want
to do in a series of questions. You never even have to hit
enter.
The second part of the program creates a sequential file
using the screen channel. This redirects the screen output to a
sequential disk file. While this part runs, only disk activity
will be noted until the end where the filenames are read back
into a string array. Here you will hear rapid keystrokes as the
input comes from the disk file.
The next part lists the filenames to the screen. As you
mark files for action, they are converted to inverse video.
When you are done, the requested action is taken on the files
you ind i cated .
In operation, the number keys, 5 to 8, are used to control
the cursor. The direction corresponds to the arrows above the
keys. The "M" key marks a filename for action. The "U" key
unmarks a file. The "N" key causes the next page (if all the
files won't fit on one page) to be displayed. The "D" key tells
the program that you are through marking files. A safety is
installed before an ERASE command is followed. Just indicate
your decision by pressing "Y" or "N".
This operation is very simple. After all, the operation of
a shell should be simple or it isn't easier to use than DOS. It
should accent the power of the DOS not take away.
Lines 1 and 2 are for those of you who have SPDOS VI . 1 and
wish to make this an AUTO execute file. All others may omit
these lines.
0 ********************************
* *
* SHELL *
* COPYRIGHT % 1987 *
* Munson H. Cockayne, Jr. BSCS *
» *
********************************
THE HISTORY OF THE RAMEX MILLENIA K
by Munson H. Cockayne, Jr. BSCS
There once was a little orphan computer named TS 2068.
Like all orphans, it was not responsible for being an orphan.
In fact, it was well designed and a pretty little thing.
However, its parent, Tiraex, decided that raising the infant
through proper marketing and support would not be a financially
rewarding experience. So it was abandoned before its first
birthday. Timex is alive and marginally sound but I for one
have not been able to use their watches since that fateful day.
Along came the carpet baggers. Ramex was just one of many
of this specie. They sought to exploit the poor orphan by
making grandeous additions. When the orphan was unable to
support -their standard of living, they abeuidoned their addition.
Kone of these wonderful people ever made ein effort to
simply expand their arena of endeavor the way so many other
computer oriented companies were doing. No, if they couldn't
have all their eggs in one basket, they would put them all in
another basket euid too bad about the old basket.
Maybe this is a little cynical but that is the way I see
it. Too many trying to make too much money from too few., Well
now it is just us enthusiasts. We can and will keep the orphan
alive until there are no more parts to fix them. Maybe by then
we will know enough to be able to design replacement parts
ourselves. Companies are proving every day that chips can be
reverse engineered without breaking any patents. As long as we
support each other and don't get greedy, we can and will keep
this computer alive! •
1 ON ERR GO TO 1: INPUT "Press ENTER" ;c$
2 ON ERR RESET
10 PRINT »1; "1) ERASE"' "2) MOVE"
20 PAUSE 0: LET c$= INKEY$ . ,
30 INPUT PRINT <»l;"The files are on drive? * PAUSE 0. LET
r$= INKEY$ : LET dl= CODE r$-48: IF dl>4 OR dl<l THEN GO TO 520
40 IF c$ ="2" THEN INPUT ;: PRINT IH;"To drive?": PAUSE 0: LET
r$= INKEY $ : LET d2= CODE r$-48: IF d2<l OE d2>4 THEN GO TO
540
50 INPUT;
100 DIM t$(143, 12)
- 110 CLS
120 PRINT *t4: OPEN *»2, " CAT ": PRINT dl
130 PRINT <t4: CAT "", : PRINT dl
140 PRINT M 4: CLOSE «2
150 PRINT M: OPEN » 5, " CAT PRINT dl
160 LET cntsO
170 FOB i=l TO 10: INPUT #5;f$: NEXT i
180 INPUT #5; f$
190 IF f$(2)=" CAT *• THEN <30 TO 220
200 LET cnt=ont-i-l
210 LET t$(cnt)=f$<2 TO )
220 INPUT l»5;f$: IF LEN f$=0 THEN (30 TO 250
230 INPUT 1t5;f$
240 GO TO 180
250 PRINT «4: CLOSE 1»6
260 PRINT »4: ERASE " CAT ", : PRINT dl
600 POKE 23658, 8: REM Shift to all caps mode
1000 FOR p=l TO cnt STEP 40
1005 FOR i=0 TO 19
1010 IF p+i <= cnt THEN PRINT t$(p+i); ,
1020 IF p+i+20 <= cnt THEN PRINT TAB 16j t$(p+i+20) ;
1030 PRINT 1035 NEXT i
1040 GO SUB 2000
1050 CLS
1060 NEXT p
1120 IF^ODE t$(i"=20 THEN IF c$="l" THEN GO SUB 3000
1130 IF CODE t$(i)=20 THEN IF c$="2" THEN PRINT »4: MOVE t$(i,3
TO ),'■": PRINT dl,d2
1140 NEXT i ,
1890 POKE 23658,0: REM Shift to normal mode
1900 IF c$="2" THEN PRINT M: CAT : PRINT d2
1910 IF c$="l" THEN PRINT «4: CAT "", : PRINT dl
1990 GO TO 10000: REM Just stops without stop error report
2000 LET columnsO
2010 LET row=0
2020 GO SUB 5000
2030 PAUSE 0: LET r$= INKEY$
2035 LET index=p+(column=16)*20+row
2040 IF r$="7" THEN IF row THEN GO SUB 5100: LET row=row-l
38
3
2050 IF r$="6" THEN IF index+1 <= cnt THEN IF row<18 THEN GO SUB
5100: LET row=row+l
2060 IF r$="8" THEN IF index+20 <= cnt THEN GO SUB 5100: LET
coluinn=16
2070 IF r$="5" THEN GO SUB 6100: LET column =0
2080 IF r$="N" THEN RETURN
2090 IF r$="D" THEN LET p=143: RETURN
2100 IF r$="M" THEN IF CODE t${ index) <> 20 THEN LET t $Cindex)=
CHR$ 20+ CHR$ l+t$( index)
2110 IF r$="U" THEN IF t$(index, 1)= CHR$ 20 THEN LET t$(index) =
t$(index, 3 TO )+" "
2120 GO Sl|B 5100
2130 GO TO 2020
3000 PRINT ttl; "ERASE: ••;t$<i,3 TO );"?": PAUSE 0: LET r$= INKEY$
: INPUT ;
3010 IF r$="Y" THEN PRINT ♦»4: ERASE t$(i,3 TO ),
*3020 RETURN
6000 PRINT AT row, column; OVER 1; FLASH 1;*' "
6010 RETURN
6100 PRINT A T row, column ;t$(p+(coluinns:l6)*20+row)
5110 RETURN
There are a few notable limitations to this little shell.
Line 100 DIMensions t$ to 143 strings. Even though there are
144 filenames possible with 5FiX)S, our little. CAT file will use
one of these. It is skipped by lino 190 since it will not exist
by the time we start marking files.
Another less obvious limitation is that it cannot MOVE
files that really crowd memory because this BASIC program is
also tieing up a fair amount of memory on its own. I still find
it to be a great little utility when I want to move several
files. The memory problem just doesn't crop up that often for
If there are any questions/problems, write to:
342 Trotter Court
Sanford, FL 32773
THIS ROUTINE PRODUCES TWO DISSIMILAR INTEGERS FOR MAKING A
FRACTION
200 LET Nr INT ( RND *C0NSTANT)+1
210 LET D= INT ( RND *C0NSTANT)+1
220 IF N=D THEN GO TO 200
230 RETURN
299 REM
THIS ROUTINE PRINTS A FRACTION AT THE COORDINATE X, Y [UPPER
RIGHT HAND CORNER] USING NUMINATOR AND DENOMERATOR.
300 PRINT AT X,Y+2*( LEN STR$ NUMERATOR=l)+{ LEN STR$ NUMERA
T0R=2 ) ; NUMERATOR
310 REM PLOT 112,88: DRAW 24,0
311 PLOT Y*8, 175-(X+l)*8+l: DRAW 24,0
320 PRINT AT X+l,Y+2*( LEN STR$ DEN0MINAT0R=1 ) + ( LEN STR$ DE
N0MINAT0R=2 ) ; DENOMINATOR
330 RETURN
1499 REM
THIS ROUTINE IS THE MAIN BODY
FOR THE FRACTION ARITHEMATIC
PRACTICE.
1500 CLS
1505 POKE 23692,255
1510 PRINT AT 21,0; "YOU ARE TO PERFORM DESIGNATED OPERATIONS
ON THE FOLLOWING FRACTIONS. ADDITION, SUBTRACTION
. MULTIPLICATION, AND DIVISION WILL ALL BE PRESENTED R
ANDOMLY. "
1520 PRINT ' ' "PRESS A KEY TO CONTINUE"
1530 PAUSE 0
1540 CLS
1550 RANDOMIZE
1570 LET RIGHT=0
1990 FOR 1=1 TO 25: REM THIS IS PROBLEM LOOP (25 ITERATIONS)
2000 DRAW 255,0: DRAW 0,175: DRAW -255,0: DRAW 0,-176
2001 BORDER 4: INPUT ;
2002 BEEP .1,20: BEEP .2,10
2010 PRINT AT 1, 11 ; "FRACTIONS" ; AT 2, 6; "A PRACTICE SESSION"
2020 PLOT 0,141: DRAW 256,0
2100 GO SUB 200
2110 LET X=10: LET Y=14: LET NUMERATOR=N: LET DENOMINATOR=D : GO
SUB 300
2140 LET N1=N: LET D1=D
2150 GO SUB 200
2160 LET X=13: LET NUMERATOR=N: LET DEN0MINATOR=D: GO SUB 300
2170 LET N2=N: LET D2=D
2190 PLOT 112,52: DRAW 24,0
2191 PLOT 112,51: DRAW 24,0
2200 LET FUNCTIONS INT ( RND *4)+l
2201 IF FUNCTI0N=1 THEN GO SUB 3000
2202 IF FUNCTI0N=2 THEN GO SUB 3100
2203 IF FUNCTI0N=3 THEN GO SUB 3200
2204 IF FUNCTI0N=4 THEN GO SUB 3300
2210 INPUT AT 1,0; "ENTER NUMERATOR"; AT 0,0;NUM
2220 INPUT AT 1,0; "ENTER DENOMINATOR"; AT 0,0;DENOM
FRACTIONS: HARD FOR YOUNGSTERS
AND A PROBLEM FOR PROQAMMING
by: Munson H. Cookajnike, Jr. BSCS
Those of you who have had to help your children with
fractions in arithematio have probaby wished you had a driller
for them. The following program can provide that driller and its
two major subroutines can be used as a bcusis for your own
program.
The Greatest Common Multiplier (GCM) routine uses an old
trick to quickly find the GCM to enable finding the reduced fornj
of a product and to enable adding and subtracting. It only uses
two compound lines, 100 and 110, to accomplish this feat.
The program is self explanitory when RUN and I have placed
comments where I thought a pointer might help. In line 9,
CONSTANT is assigned a value of 10 but it can be changed as
needed for your youngster. It sets the upper value limit for
the numerator and denominator. In line 1990, the problem loop
is set to 26 iterations and this can be changed as you see fit.
The scores are saved in a sequential file for your viewing
any time. This file has to be started with the command line:
PRINT «4: OPEN 4»6, "scores" : : PRINT t»6; "SCORES" : PRINT <»4: CLOSE
«6
This will initialize the file to contain the word 'SCORES'. The
second program will read this file to the screen or to a printer
when you want to see it.
1 REM
91986 K. I.S.S./softstuff
Munson H. Cookayne, Jr. BSCS
2 ON ERR GO TO 7: PRINT *»4: OPEN # 5, "scores"
3 PRINT #4: OPEN » 6, "temp*
4 INPUT »6;a$
5 PRINT #6;a$
6 GO TO 4
7 ON ERR RESET : PRINT «4: CLOSE * 5:: PRINT #4: ERASE
"scores",
9 LET CONSTANTslO: REM THIS SETS UPPER LIMIT OF FRACTION
COMPONENTS
10 GO TO 1500
99 REM
THIS ROUTINE (LINES 100 TO 110) RETURNS THE GREATEST COMMON
DIVISOR THAT EXISTS FOR THE PAIR OF INTEGERS IN M AND N.
100 IF NOT INT n THEN LET gods ABS m: RETURN
110 LET t= INT (m-n* INT (m/n)+.006): LET m=n: LET n=t: GO TO 1
00
2225 IF ( (FUNCTI0N=2) AND (N1/DKN2/D2) ) THEN LET AN=-AN
2230 IF (NUM=AN AND DENOM=AD) OR (NUM=AN/GCD AND DENOM=AD/GCD ) T
HEN GO TO 5000
2240 GO TO 6000
2800 PRINT #1; "PRESS A KEY TO CONTINUE"
2810 PAUSE 0
2820 CLS
2990 NEXT I
2991 PRINT #6; RIGHT
2992 PRINT ^4: CLOSE * 6
2993 PRINT M: MOVE "temp", "scores"
2994 STOP
3000 PRINT AT 8, 15; "ADD"
3010 LET N=D1: LET M=D2: GO SUB 100
3015 LET N=N1*D2
3020 LET M=N2*D1
3025 LET AN=M+N: LET AD=D1*D2
3030 LET N=AN
3040 LET M=AD
3050 GO SUB 100
3060 RETURN
3100 PRINT AT e, 12: "SUBTRACT"
3110 LET N=D1: LET M=D2: GO SUB 100
3115 LET N=N1*D2
3120 LET M=N2*D1
3125 LET AN= ABS (M-N): LET AD=D1*D2
3130 GO TO 3030
3200 PRINT AT 8, 12; "MULTIPLY"
3210 LET AN=N1*N2
3220 LET AD=D1*D2
3230 GO TO 3030
3300 PRINT AT 8, 13; "DIVIDE"
3310 LET AN=N1*D2
3320 LET AD=D1*N2
3330 GO TO 3030
6000 LET RIGHT=RIGHT+1
5010 LET X=17: LET DENOMINATOR=DENOM: LET NUMERATOR=NUM.' GO SUB
300
5020 LET N=NUM: LET M=DENOM: GO SUB 100
6030 IF GCD <> 1 THEN LET DENOMINATOR=DEN0M/GCD: LET NUMERATOR=
NUM/GCD: LET Y=20: PRINT AT 17,18;"=": GO SUB 300
6040 GO TO 2800
6000 BEEP .6,-10
6010 PRINT AT 20,13; BRIGHT 1; "WRONG"
6016 PRINT *H; "PRESS A KEY FOR RIGHT ANSWER": PAUSE 0: INPUT ;
6020 LET X=17: LET DENOMINATORS AD: LET NUMERATOR=AN : GO SUB 300
6030 PRINT AT 17,5; FLASH 1; "RIGHT =>"
6040 LET M=AD: LET N=AN: GO SUB 100
6050 IF GCD <> 1 THEN LET DENOMINATOR^AD/GCD: LET NUMERATOR=AN/
GCD: LET Y=20: PRINT AT 17,18;"=": GO SUB 300
6060 GO TO 5040
39
"CHECKER"
A SHORT LESSON ON SPDOS
by: Munson H, Cockayne, Jr. BSCS
In this short lesson on SPDOS, I am going to reveal one of
the many ways that SPDOS can be used by assembly programmers.
This is not to imply that if you are not an assembly programmer,
you cannot use this article or the program herein contained. To
the contrary, you may find it very useful.
The SPDOS system call is one that checks for a filename's
existence on a disk. If you try to load a file that is not on
your disk, SPDOS will create an error that cannot be trapped by
the usual ON ERR GOTO. Try it! It can leave you with a locked up
computer, forever trying to GOTO and always ERRing..
The only satisfactory solution to this situation is
assembly. There is a hook code call that can be made to SPDOS.
Some of you may be familiar with some of the hook routines if
you are assembly programmers and were once SURFers. But let's
get on with the program.
According to the SPDOS Newsletter 1»2, there is a section of
memory set aside by SPDOS to hold headers for files much the
same way BASIC uses the DE and IX register pairs to hold the
address of a file header and its length. The address of this
header area is fixed at E420 hex or 68400. The map of this area
is as follows:
E420 Filetype (one byte)
E421 Filename (ten bytes)
E42B Filelength (two bytes)
E42D Start (two bytes)
E42F Zeros (15 bytes)
The start bytes are the starting address of a byte file, the
first line to execute for a BASIC program, or zeros for any
other type of file. The filetype can be 0 for BASIC or 3 for a
byte file. (I will leave the other types for another article or
for you to figure out. )
The hook doesn't work unless you tell it what you want to
do. For the function in which we're interested, the B register
communicates the function desired. The hook we will use is:
B = 13
This checks for the file
on the disk
With these prerequisites met, we make the call to E490
(58512), That is where the hook code is. Now we go for the
program.
ADDR CODE
F400 2A5D5C
F403 7E
F404 FE24
F406 2817
F408 FE22
F40A 23
F40B 20F6
F40D E5
F40E OlFFOA
F411 7E
F412 OC
F413 23
F414 FE22
F416 2802
F418 10F7
F41A 0600
F41C El
F41D 185F
F41F 2B
F420 7E
F421 E6DF
F423 F5
F424 2A4B5C
F427 ED5B595C
F42B IB
F42C Fl
F42D E5
F42E A7
F42F ED52
F431 El
F432 2874
F434 BE
F435 F5
F436 2831
F438 7E
F439 CB7F
F43B 2012
F43D CB6F
F43F 2806
F441 110600
F444 19
F445 18E0
F447 23
F448 4E
F449 23
F44A 46
F44B 23
F44C 09
F44D 18D8
F44F CB77
F451 200C
F453 CB6F
F455 28F0
F457 23
MNEMONIC
MAIN LD HL, (chad)
FIND LD A, (HL)
CP 24
JR Z.VSTB
CP 22
INC HL
JR NZ.FIND
PUSH HL
LD BCOAFF
GETC LD A, (HL)
INC C
INC HL
CP 22
JR Z,D0LN
DJNZ,GETC
DOLN LD B,00
POP HL
JR DOHD
VSTR DEC HL
LD A, (HL)
AND DF
PUSH AF
LD HL, (vars)
LOOP LD DE, (elin)
DEC DE
POP AF
PUSH HL
AND A
SBC HL,DE
POP HL
JR Z,ERR2
CP (HL)
PUSH AF
JR Z,DOIT
LD A, (HL)
BIT 7, A
JR NZ.BIT6
BIT 5, A
JR Z, ARAY
•VAR LD DE,0006
ADD HL.DS
JR F427
ARAY INC HL
LD C,(HL)
INC HL
LD B, (HL)
INC HL
ADD HL,BC
JR LOOP
BIT6 BIT 6, A
JR NZ.MORE
BIT 5, A
JR Z,ARAY
NAME INC HL
get BASIC pointer
get the character there
is it "$"7
yes, jump to $var evaluator
is it ?
point to next char
not , loop
save pointer
set counters
get char of string
increment count
point to next char
is this one ?
yes, jump to length evaluator
no, loop to max of ten char
clear counter
get start of string
jump to do header
point back one char
get var nana
convert it to upper case
save it on stack
get start of vars area
get end of vars area
point back one
restore converted char
save current pointer
clear carry flag
check for end of vars
restore current pointer
end of vars, quit to ERR2
is this the string we need?
stack the converted char
yes, we got it so go do it
not right so lets check for type
is bit 7 set?
yes, test more
is bit 5 set?
no, ths is an array
this is simple *^ var
so point past it euid
loop back
point to next byte
get the
byte count
into BC
point past byte count
point past var
loop back
is bit 6 set?
no, test some more
is bit 5 set?
no, test more
point past this byte
7E
LD A, (HL)
BIT 7, A
F45B
JR NZ, »VAR
F45D
18Fo
JR NAME
F45F
CB6F
BIT 5 , A
F461
28E4
JR Z, ARAY
F463
011300
LD BC,0013
F466
09
ADD HL,BC
F467
18BE
JR LOOP
F469
23
DOIT
INC HL
F46A
4E
LD C, (HL)
F46B
23
INC HL
F46C
46
LD B, (HL)
F46D
23
INC HL
F46E
Fl
POP AF
F46F
C5
PUSH BC
F470
Dl
POP DE
F471
E5
PUSH HL
F472
210A00
LD HL, OOOA
F475
A7
AND A
F476
ED62
SBC HL,DE
F478
El
POP HL
F479
3003
JR NCDOHD
F47B
OlOAOO
LD BC, OOOA
F47E
1121E4
DOHD
LD DE,E421
F481
79
LD A, C
F482
EDBO
LDIR
F484
67
LD H,A
F485
3E0A
LD A, OA
F487
94
SUB H
F488
2807
JR Z.SKIP
F48A
47
LD B,A
F46B
3E20
LD A, 20
F48D
12
ADSP
LD (DE),A
F48E
13
INC DE
F48F
lOFC
DJNZ, ADSP
F491
3E00
SKIP
LD A, 00
F493
62
LD H,D
F494
6B
LD L,E
F495
13
INC DE
F496
77
LD (HL},A
F497
011100
LD BCOOll
F49A
EDBO
LDIR
F49C
0613
LD B, 13
CALL HOOK
F49E
CD90E4
F4A1
010100
LD BCOOOl
F4A4
D8
RET C
F4A5
OEOO
LD C,00
F4A7
eg
RET
F4A8
CF
ERR2
RST 08H
F4A9
01
ERROR 2
F4A9
HOOK EQU E490
get byte
is bit seven set?
yes, go increment past value
loop
is bit 5 set?
no, then it is an array
increment
by 19 bytes
and loop
get byte
count for this
variable
into registers
point past this count
restore char
copy count to
second register pair
stack pointer
set to max length
clear carry
test length
restore pointer
if not too long then do he^er
else, set length to ten
point to disk header area
save count
move string
put count in register
set limit
get number of spaces needed
skip if none needed
transfer count again
put space in accumulator
add it to end of string
increment string pointer
repeat till count expires
clear aocumulator
transfer pointer
to HL
point to byte past pointer
clear the first byte (prime pump
set counter
zero fill
set request to check for file
check for file
set return to true value
and return if file found
else, set to false
and return
do error
»2 report
HOOK is 58512
This utility must exist somewhere in memory. A REM
statement of 170 free bytes at the beginning of a BASIC program
will do nicely but it can be put anywhere you want as ii; is
relocatable. , . , , ^
This utility can handle simple string variable references
or constants only. I did not intend to include TS function
dispatcher in this discussion and, instead, I made the little
lookup routine. It does not handle string array references!
Here is an example of a use for this routine.
10 REM "CHECK" IS A VARIABLE CONTAINING THE ADDRESS OF THE FIRST
BYTE OF THE PROGRAM ABOVE
1000 IF USR CHECK THEN PRINT »4: LOAD "YOUR PROG
1010 IF NOT USR CHECK THEN PRINT "YOUR PKO^"; " NOT ON THIS
5lSK! PUT RIGHT DISK IN DRIVE AND PRESS ENTER": PAUSE 0: GO
TO 1000
Or try this:
10 REM "CHECK" IS AS ABOVE « .. ,
1000 INPUT "ENTER TITLE OF FILE YOU DESIRE: ";LINE T$
1010 IF USR CHECK THEN PRINT M: LOAD T$ ^^^^
^520 F NOT USR CHECK THEN PRINT T$;" NOT ON THIS DISK!" '"TUT
RIGHT DISK IN DRIVE AND PRESS ENTER": PAUSE 0: GO TO 1000
Remember, the first string reference after the call to
CHECK must be the filename that you are seeking as in lines.
1000 and 1010 in first program fragment
1010 and 1020 in second progr^ fragment
Here is a little program in BASIC to load the code.
10 LET START = 62464: REM START can be any convenient address.
62464 is the start of a Ik buffer in SPDOS.
1000 FOR A = START TO START + 169: READ X: POKE A,X: NEXT A
9000 DATA 42, 93, 92, 126, 254, 36, 40, 23, 254. 34, 35, 32,
246 229, 1, 255, 10, 128, 12, 36, 254, 34, 40, 2, 16, 247, 6,
0 225 24 95, 43, 126, 230, 223. 246, 42, 75, 92, 237, 91. 89,
92 27' 24l, 229? 167, 237, 82, 225, 40, 116, 190, 245, 40, 49,
?26, 203 127 32, 18 203, 111, 40, 6. 17. 6. 0. 25 24 224
35 78, 35, 70, 35, 9, 24, 216, 203, 119. 32. 12. 203, 111, 40,
240 35, 126, 203, 127, 32, 228. 24. 248, 203, 111. 40, 228, 1,
19 0 9, i4 190 35. '78. 35, 70, 36. 241, 197 209, 229, 33,
10 0 167, 237, 82, 225. 48. 3. 1. 10, 0, 17, 33, 228. 121,
237, 176, 103, 62. 10, 148. 40. 7. 71. 62, 32, 18, 1»» ^6. 252,
62. o; 98, 107. 19, 119, 1, 17, 0, 237, 176, 6, 19, 205. 144,
228, 1. 1. 0, 216, 14. 0. 201, 207, 1
Have fun with this and send your comments /questions to:
342 Trotter Court
Sanford, FL 32773
40
KISS,
M^jfy CQmmand
PRINT <l4'Make,<»
PRINT <»4'X
PRINT Names
PRINT M'Dump
PRINT »4' VERIFY
PRINT 114'ReDUin
K. I. S. S. /computers
presents
SPDOS UTILITIES VI. 1
Function
statement with Ht bytes of free
Makes a
space.
Eliminates every line that begins with a
REM statement.
Reveals the names and types of all
variables in the VARS area.
Dumps all the information in the VARS
area including location and contents.
Is an IF ... THEN construct that tests for
a filename on the disk.
Is a line renumbering routine that allows
you to select increment, block of lines to
be renumbered, and starting line number.
NONE OF THE ABOVE ROUTINES USE ANY EXTRA MEMORY BEYOND THAT USED
BY SPDOS. The SPDOS buffer holds these routines when called so
they are compatible with all your existing programs!
Also included:
TRACKER, a full function sector editor and, CHECKER, a memory
resident routine that checks for a filename on the disk.
PRICE: $11.00 pp on 5 1/4 inch DS/QD or SS/QD disk. Also
available on cassette for transfer to your disk at $12.00
pp. (Specify media please) Full documentation on
disk/cassette. MONEY BACK IF NOT SATISFIED!
/}l/A//A6/c.C2i4IH<r§OON ^0uJ^
P>^ Is the disk filename organiser that puts your files
RjyfL in alphanumeric order (not case sensitive).
^ Is a disk to tape file MOVEr. * ^ ntr
©1886 K. I.S.S./softstuff
Munson H. Cockayne, Jr. BSCS
10 CLS
20 PRINT #4: OPEN 1*6, "scores" « t irm *
30 PRINT <tl;"l) To screen"' "2) To Printer : PAUSE 0: LET r$=
1NKEY$ : INPUT IF r$ <> "1" AND r$ <> "2" THEN 60 TO 30
40 IF r$="l" THEN OPEN # 2, "s"
50 IF r$="2" THEN OPEN » 2, "p"
60 ON ERR GO TO 120
70 INPUT »5;a$
80 PRINT a$
90 INPUT JJ5;a$
100 PRINT ,a$
110 GO TO 80
120 ON ERR RESET
130 PRINT «4: CLOSE »5
140 CLOSE »2
Hell, that's it for now. Questions to:
342 Trotter Court,
Sanford, FL 32773.
{0^
"rem this PROG^RPH H0UE5 SORE
EN S FILES FROM THE JLD SYSTEM T
n THE SPDOS SYSTEH fiND IS R DEHO
ra^^TRHTIDH OF THE TUO SYSTEMS TOu
ETHER. I PHI RUNNING THIS UN H TU
n DPIUE SY^EH HMD SELECT JLO Dh
I^=E ttl TO 8§0T FROM BY PRESSING
i hS I TURr^TON THE fiHCHINE. SPDO
S IS hLwhYS LuhDED FROH JLO UHl^J
E it0 SO TriHT SYSTEH UILL BE IN T
HPT ijhvjE. COMHPnDS OF EPOH SYS l
EM UILL DEFPULT TO THElH 9.Et^P^£A
lUE DPIUES.
10 OPT Ph^jz>^ 0; INPUT "NsrTi£
of screen" ;a$
11 IF 3E="DIK=' T\iEH PRINT 114:
CRT P9^^SE. O GO TO 1^
12 LORD /■^a$SCRFEN$ : PPAi^E 0
13 PRINT tt4; SPUE B$SOREEN$
15 GO TO 10
41
LARPCEIM X rx ±^ rr- <z> czlxj^ <=: & ^ « • .
256K for your TS2068
^i^^^jfj^^^ NEW LARKEN RAMDISK mmm Now you can expand your 2068 to up to 256K of nonvolatile Ran with the
Nev Larken Raudiak systeo. The Raadisk systea consists of the Larken IKDOS Ex-Basic cartridge and a rear iounted
nonvolatile aeaory board. The LKDOS operating systea uses all the standard Basic conaands to operate the Raadisk such as
LOAD SAVE CAT MERGE FORMAT ERASE etc, so its as easy to use as a cassette or Floppy disk. ^ ^ ^
The Raadisk aeaory board uses the new 32K x 8 static raa chips (62256-LP) and coaes with 64K of Raa, You can add aore
chips for up to 25dK . Battery Backed up. Very Fast and reliable. Its fully Spectrua and OS-64 and floppy disk
coapalable (Larken, Raaex or Oliger). Tape backup projraa included.
- PRICE : RaaDisk with 64K, and LKDOS Ex-basic Cartridge tl29.95
nmm 400K 2068/Spectrua Floppy disk Interface The disk interface can support up to 4 - 3" to 5.25" SS
DS or Quad (800K) drives. An NMI Snap-shot push button and KEMPSTOH Joystick port are on the disk Interface. It can
load 32K in less than 4 seconds . Add 18 for cable.
- PRICE: 400K Disk Interface and LKDOS cartridge ...••..••.-•t-
- Coaplete Systea: Raadisk (64K), 400K Floppy disk IF and LKDOS .... »179.95
«mm« AERCO RAHEX or OLIGER disk users You can now have LKDOS for your disk IF for Spectrua,
OS-64 and Larken disk coaoatability and also RaaDisk Capability. An NNI button can be added for Snapshot aeaory saves.
Also S of all LKDOS eKccoL^^^^ L0AD,SAVE,CAT,F0RHAT,MERGE,ERASE,FILI,«IHD0HS, etc. Send for info.
- PRICE: LKDOS (Aerco Raaex or Oliger) !55 o • • t^.. pp nP-HATE
- Spectrua Eaulator added to any product above .....$20.00 See Review m Jan. «b uf uaxc
ummm LKDOS SOFTWARE ^{m«^e*» ( ail software will run on any Lkdos based floppy disk or raadisk or
coabination. Supplied on 48 ipi 5, 25* disk, or on cassette .) n , m i l a« j i j i*i
-SEQUENTIAL FILE SUPPORT PACKAGE - This raa based Lkdos extension allows sequential files to be Opened, closed, written
to ^read froa u^^ coaaands OPEN, CLOSE, PRINTII, IHPUT#, INKEYS# etc. ... J 0.00
- XMODEM to LKDOS MODEM PACKAGE - Lets you up or down load 2050 aodea files directly to disk with out any buffer size
liaitations. Transait or recieve files as large as lOOK. Lkdos users can send entire M saves over the aodea. Mini
-^KDOS^ISK^EDITOR'-'Th^^ lets you aodify any block on the disk, aap out bad blocks , reforaat single tracks
and aore. Coaplete docuaentation on Lkdos operation and accessing the dos froa aachine code is included. ... 110
ALL PRICES ARE »US ADD $5 S&H FOR HARDWARE ADD 12 SiH FOR SOFTWARE .
LARKEN ELECTRONICS RR#2 NAVAN, ONTARIO, CANADA, K4B-1H9, (613)-835-2680
See Review in Jan. 88 UP-DATE
» TS-2068 PROGRAMS »
Diamond Mike I J and Great Game & Graphics
Shorn Two great programs for only flO.
Money Machine II: The Ultioate Word Game
based on a popular TV gaoe show. $11.
Uord Twister i Customize your own word-
search puzzle. Vocabullders Easy-to-use
educational progran. Both for only $10.
Programs above are available on tape or
Aerco FD-68 5 1/4" double density disk.
Following programs are for Aerco FD-68
only. Available on 5 1/4" disk or tape.
Disk File Manager: Copy individual files,
even on single drive system. Detailed
catalog, and many other functions. $13.
OmniDiski Convert Omnicalc II to disk.
CustoBize many options. $9.
= = = = = == = = = = = = = = = = = = = = == = == = 5:= = == = == = == = = =
Prices include postage. Please send
22-cent stamp for complete catalog or
check/money order to» Chia-Chi Chao
73 Sullivan Drive, Horaga, CA 94556-1209
PisfiJ Ffiml PLUS!
THE DESKTOr PUBLISHER
by Lenke SoKtwoire
^ What's the PLUS?
M PEBFOBHMCE!
tlxese SPECS >
1 ) WYS
SIWYG (Iih*t Xou £«e
eat a your t«xt on the T^*'
Cr
scr ««n
LOAD <9'r «ph i cs . . .
HEW rUHCTIOH« LOAD_ICOH
as e»sy ais typin^r!
Yposi t i on curapor , Ci»d . LOAD )
2 J AUTOMATIC And MAHUAL line and
char*ct«r Adjustments.
3) RESTORE FOHT (after usin^r the
BOLD/HODERH/ 1 TAL I C »o d i f i ers .
4} KEEP/UHDO/SAVE/LOAD/LOAD ICOH
LOAD SCREEHS/SAUE SCREEHS
W I DE/H I GH/CLS/SCROLL SPEED
5) OVER/ t HVERSE/C APS LOCK
UP TO 16 POIKT rOHTS
(font p«ckA9c in develop.)
6 ) CO PY/ERASE/ 1 HSERT/DELETE/HEW
7) AERCO/TASMAH/A&J CP I
8) IBM/EPSOH/PRO WRITER Printers
Pi>cel Print PLTTS ! has all of
the feature* tound in v 2.0,
it is \2Qy. compatible with
the Pixel Print ICOH «1 t, »2
packages, FOHTs «i, n2, a, tt3
as well as the TAiSHOHD Ot i I .
and your Pixel Pr i nt files!!
The PLUS wore f -unctions
to wake this as even wore
power fu 1 /e asy to use progrran.
Pixsl Prittt PLUS (v3.1)
Order yours today!
(This ad created ii^Q'A) with
the Pixel Print PLUS pr o 9r a»
with FOHTs and ICOHs...)
Lexftke Software
2 144 White Oak
Wichita, Ks .
6t20T
PIXEL PRINT PLUS!...
. $ia^
TASyORD TEXT COHV...
. $is^
ICOH PACKftGE 81
.
ICOH LIERARV 12
, 114^
FOHT PACKAGE 11
FOHT LIBRARY 12
FOHT LIERARV 113
. $19^
42
The ISSUE DISK Program
The issue diskette is a integral part of TS-2068 UP~-DATE.
The proceeds of sales are divided to pay token renumeration to
the authors of the programs presented in the magazine for
key-in projects. UP-DATE takes $8*00 for expenses and divides
the balance between authors. Although there has been no
disbursements at this writing^ a ledger is kept for each
author and checks will be mailed as funds accrue.
Generally^ the feature programs included in the issue
diskette are original programs never before offered to the
TS-2068 user group and not for sale from other sources. Most
of the utilities included are also neWf but similiar utility
programs may have appeared in other magazines. Public Domain
progrms may be added from time to time, in order to increase
the value of the diskette. Such public domain programs will
be carefully checked out for value and to insure that they
operate without flaw.
UP-DATE tries to make the issue disk a $50.00 value in
comparison with programs offered commerically for other
computers. Sometimes, as in this April issue, the Larken
users cannot use the 5 DOSDEX programs. In such cases fill in
programs will be added to the Larken issue disk to make up the
difference. The same applies to other system formats. Such
fill in programs may be accompanied by documentation if
needed. Whatever, UP-DATE guarantees "satisfaction or money
back" on all issue diskettes. The old American custom "the
baker's dozen" applies. Extras may be thrown in to make sure
that you get more than you pay for.
*********************************************************
The April 1988 Issue Disk
The April Issue diskette will be ready 0/A May 1st and
will include the Feature Software "Budget", plus the compiled
program, plus the printer annex, plus the customized "Loader
Manager" for either Oliger Safe, or Larken LKDOS system.
Later when the Aerco Disk capability is re-gained, that format
will also be available. Aerco Disk users may order the issue
disk, but please DO NOT inclose payment. The disk will be
mailed when ready and an invoice enclosed.
Other programs and utilities included in the April issue
disk are: Five DOSDEX Manager programs (OLIGER FORMAT ONLY),
MAIL MERGE (LARKEN FORMAT ONLY), the MOV utility (all
formats), and the Screen String Demo program (all formats).
The Mail Merge program for Larken Format is the same program
given in the January issue, but converted to Larken format.
The issue disk is priced at $16.00 and is sent postpaid.
Send orders to UP-DATE, address given on cover.
Continued fpoia preceeding page.
— External collector resistance
rcECsat) — CoUector-to-emitter satura-
tion resistance
— Damping resistance
Re — External emitter resistance
— Emitter>base junction resistance
(assume 4 ohms average)
reU2 — Small-signal emitter-emitter on-
state resistance (double emitter tran-
sistors)
r, — Dynamic resistance at inflection
point
— Load resistance
R^—Thermal resistance
R^^—Thermal resistance, case-to-ambi-
ent
R^^__Thermal resistance, junction- to-
ambient
R^e— Thermal resistence, junction-to-
case
r,j — Slope resistance
Si — Silicon
T — ^Temperature
Ta— Ambient temperature
Tc — Case temperature
tj—Delay time
it — Fall time
tfr — Forward recovery time
Tj— Junction temperature
tofl — ^Turn-off time
ton— 'Tum-on ^^^^^
Operating temperature
— Pulse time
t,^ — Rise time
t^,-_Reverse recovery time
— Storage time
TSS— Tangential signal sensitivity
Trtr— Storage temperature
— Pulse average time
Vb— Base volUge (dc)
VBB—Base supply volUge (dc)
— Base-to-collector voltage (dc)
Vbc — Base-to-collector voltage (rms)
Base-to-collector voltage (instanta-
neous)
— Base-to-emitter voltage (dc)
Vbe«i— Saturation voltage, base to
emitter
V»^— Base-to-emitter volUge (rms)
v»^— Base-to-emitter voltage (instanta-
neous)
voo— Breakover voltage (instantaneous)
V(DR>cBo — Breakdown voltage, collector-
to-base, emitter open
V(BR)CEo — Breakdown voltage, collector-
to-emitter, base open
V<BR>cER"~Breakdown voltage, collector-
to-emitter, with specified resistance
between base and emitter
V{DR)CEs— Breakdown voltage, collector-
to-emitter, with base short-circuited to
emitter
V(QR)CE\ — Breakdown voltage, collector-
to-emitter, voltage between base and
emitter
V<BR)CEx— -Breakdown volUge, collector-
to-emitter, circuit between base and
emitter
V{BR)EBO— Breakdown volUge, emitter-
to-base, collector open
V(BR)Eco— Breakdown volUge, emitter-
to-collector, base open (formerly
BVeco)
V(BR)EiE2~-Breakdown volUge, emitter-
to-emitter (double-emitter transistor)
V(BR)Gss— Breakdown volUge, gate to
source, drain short-circuited to source
V{BR)G3SF — ^Breakdown volUge, forward
volUge applied to gate-source, drain
short-circuited to source
V(BR)cssR— Breakdown volUge, reverse
volUge to gate-source, drain short-
circuited to source
V(BR)a— Reverse breakdown volUge
Vb2bi— Bias dc volUge between base 2
and base I (double-base transistor)
Vc— Collector volUge (dc)
VcB— Collector-to-base volUge (dc)
VcB(flr— I^c open-circuit volUge, floating
potential, coUector-to-base
V^j,--Collector-to-base volUge (rms)
Vcb— Collector-to-base volUge (instanU-
neous)
VcBo— Collector-to-base voltage (dc),
with emitter open
Vcc— Collector supply volUge (dc)
VcE— Collcctor-to-emitter volUge (dc)
V„— Collector-to-emitter volUge (rms)
VcE(nr-^^c open-circuit volUge, floating
potential, collector-to-emitter
VcEO—Collector-to-emitter volUge (dc),
with base open
VcER— CoUector-to-emitter volUge (dc),
with specified resisUnce between base
and emitter
VcEs-^Collector-to-emitter volUge (dc),
with base short-circuited to emitter
VcE«a— Saturation volUge, collector to
emitter
VcEv— Collector-to-emitter volUge (dc),
with voltage between base and emitter
VcEx— Collector-to-emitter volUge (dc),
with circuit between base and emitter
Vd— Off-sUte volUge (direct)
Votr- Drain supply volUge (dc)
Vdg— Drain-to-gate volUge (dc)
Vdk— Peak o£f-sUte volUge
Vdrm— Peak off-sUte volUge repetitive
Vpg — Drain-to-source volUge (dc)
Vj^-^Peak off-sUte volUge, nonrepet-
itive
Vdu— Drain-^o-su^strate volUge (dc)
Vdwm— Peak off-sUte volUge, working
Ve— Enwtter volUge (dc)
Veb— Emitter-to-base volUge (dc)
VEwnr-Dc open-circuit volUge. floating
potential, emitter-to-base
Vebo— Emitter-to-base voltage (dc),
with collector open
Vec— Bmitter-to-collector volUfi:e (dc)
VEctfl)— Dc open-circuit volUge, floating
potential, emitter-to-collector
Vee— Emitter supply volUge (dc)
Vf^Forward volUge (dc)
V| Alternating component of forward
volUge (rms value)
V, Forward volUge (instanUpeous)
Vro— Forwaiy gate volUge (direct)
Vfgm— Peak forward gate volUge
VrM— -Forward volUge, peak total value
Vr<BMS) — Forward voltage, total rms
value
VcD— Gate nontrigger (direct) volUge
Vc<j--Gate supply volUge (dc)
VcQ— Gate turn-off volUge (direct)
Vcs— Gate-to-source volUge (dc)
Voa<ofl) — Gate-to-source cutoff volUge
Vcsdh)— Gate-to-source theshold volUge
Vcgp — ^Forward gate-to-source volUge
(dc), of such polarity that an increase in
iU magnitude causes the channel re-
sistance to decrease
Vgsr— Reverse gate-to-source volUge
(dc), of such polarity that an increase in
iU magnitude causes the channel re-
sistance to increase
Vex— Gate trigger volUge (direct)
Vgtrmin— Minimum gate trigger volUge
Vgu— Gate-to-substrate volUge (dc)
V,— Inflection-point volUge
Vp—pcak-point voltage (double-base
transistor)
Vpp— Projected peak-point volUge
VpT— Punch-through volUge
Vr— -Reverse volUge (dc)
Vr-Altemating component of reverse
volUge (rms value)
vu — ^Reverse volUge (insUnUneous)
Vr(iim8)— Reverse voltage, total rms
value
Vbkm— Reverse volUge, maximum re-
current
Vrsm— Reverse volUge, peak transient
Vrt — Reverse collector-to-base volUge,
reach-through volUge
Vg^-^Reverse volUge, (peak) working
Vbb — Source-substrate volUge
Vbs— Source supply volUge (dc)
Vgu — Source-to-substrate voltage (dc)
VT—On-sUte volUge, direct
Vtmw— Minimum on-sUte volUge
Vto— Threshold volUge
Vv— Valley-point volUge (double-base
transistor)
Vz— Regulator volUge, reference volt-
age (dc working volUge)
VzM— Regulator volUge, reference volt-
age (dc at maximum rated current)
ygj—Small-signal, short-circuit forward
transfer admittance, common base
yr, — Small-signal, short-circuit forward
transfer admitUnce, common emitter
— Small-signal, short-circuit forward
transfer admittance, conmion source
Continued on next page.
yjb— Small-signal, short-circuit input ad-
mittance, common base
y,e— Small-signal, short-circuit input ad-
mittance, common collector
y,,— Small-signal, short-circuit input ad-
mittance, common emitter
y^j^_-^mall-3ignal, short-circuit output
admittance, common base
yo<— Small-signal, short-circuit output
admittance, conunon collector
y^—Small-signal, short-circuit output
admittance, common emitter
yrt-^mall-signai, short-circuit reverse
transfer admittance, common base-
y„— Small-signal, short-circuit reverse
transfer admittance, conunon collector
y„— Small-signal, short-circuit reverse
transfer admittance, common emitter
— Impedance, modulator freq. load
Zrf— Impedance, radio frequency
Z«,)— Transient thermal impedance
Z^^(j,__Transient thermal impedance,
junction- to-ambient
Zejc(i)—Transient thermal impedance,
junction-to-case
— Video impedance
^.—Regulator impedance, reference im-
pedance (small-signal at U)
zzK— Regulator impedance, reference
impedance (small-signal at U)
Volume Measure
Machine Screw Tap and Clearance Drill Sizes
■
Type
Tnn HrHI
lap uriii
ripurancfi Drill
WlCOlCIIIWw Willi
Tap Drill
Clearance Drill
0-80
3/64
50
10-24
25
13/64
1-^4.
53
47
10-32
21
13/64
1-72
53
47
12-24
16
7164.
2-56
50
42
12-28
14
7/32
2-64
50
42
1/4-20
7
17/o4
3-48
47
36
1/4-28
3
1 //d4
3-56
45
36
5/16-18
F
21/64
4-40
43
31
5/16-24
1
21/64
4-48
42
31
3/8-16
5/16
25/64
5-40
38
29
3/8-24
Q
25/64
5-44
37
29
7/16-14
U
29/64
36
25
7/16-20
25/64
29/64
6-40
33
25
1/2-12
27/64
33/64
8-32
29
16
1/2-13
27/64
33/64
, 8-36
29
16
1/2-20
29/64
33/64
Liquid Measure
1000 cubic millimeters
1000 cubic centimeters
1000 cubic decimeters
10 milliliters
10 centiliters
10 deciliters
Weight Measure
10 milligrams
10 centigrams
10 decigrams
10 grams
10 delcagrams
10 hectograms
1000 kilograms
= 1 cubic cenUmeter
= 1 cubic decimeter
= 1 cubic meter
• 1 centiliter
! 1 deciliter
: 1 liter
• 1 centigram
^1 decigram
= 1 gram
' 1 dekagram
'1 hectogram
s 1 kilogram
! 1 metric ton
CODE FOR FILM AND MICA CAPACITOR
First digit of —
capacitors value.
Second digit of -
capacitors value.
Multiplier: Muiitply the
first & second digits by
the proper value from the
Multiplier Chart.
To find the lolerence of
the capacitor, look up this
letter in the Tolerence columns.
MUlFlPtlCR
FOR TH[
NUM8CR
MULTIPLY
BY
100
1000
10.000
100.000
001
0.1
TOLERENCE OF CAPACITOR
lOpf OR
LESS
lOlpf
i075pf
±0 5pf
: 1 OpF
LETTER
OVER
lOpF
±2%
±3%
±5%
1 10%
±20%
TANTALUM CAPACITORS
(CAPACITANCE GIVEN IN/xF}
1st Si{nilicant Fifure Sicnificanl Figure
Wut1ipli«f
VoltJ£e
1st
2nd
RATED
COLOR
SIGNIFICANT
SIGNIFICANT
MULTIPLIER
DC
FIGURE
FIGURE
VOLTAGE
Blick
0
I
to
Brown
1
1
10
Red
I
2
100
Of ante
3
3
6.3
Yellow
4
4
Cfeen
5
S
16
Blue
6
6
20
Violet
7
;
25
Gray
8
I
001
While
9
9
01
3
Pink
35
Capacitor Color Codes—
Z-6
Continued on next page.
S . N . U . G .
Sinclair Northamerica Users Group
During one of the organizational meetings of the recent
Sunstate Timex/Sinclair Winterfest '88, the idea of a National
organization for the advancement of Sinclair computing came up.
It was decided that since we had developed a "core group" that
was dedicated to promoting Sinclair computing, Ule would attempt
to lay the groundwork for such an organization. It was also
mentioned that the greater the amount of time from the departure
of Timex from the computer industry, the less of an active
market would result. Since we would have users from across the
nation at the f est , it would be an ideal time to make our plans
known. So, the Sinclair Northamerica Users Group, or SNUG Ca
name submitted to us by John Cushran, and later modified by Bill
Jones) was starting to come closer to reality.
UHAT IT IS
The intent of SNUG is to provide a forum for exchange of
ideas. It would be a source of information, such as a listing of
active members, active Users Groups, Sinclair specific Bulletin
Boards, an active library of Public Domain software, and a
listing of available shareware and freeware. Later on we hope to
propose an industry wide standard of hardware and software
compatability .So as to not to have to reinvent the wheel, and to
do this in the shortest amount of time, we going to try and use
an already established National group, such as CDRSA ( Corvair
Owners Assn.) as a model to base our group on. SNUG would act as
an umbrella Organization, with Regions being developed to tie in
with established proups in those areas,
UHAT IT ISN'T
It is the intent of the organizers NOT to infringe or
supercede any already established User Group or Vendor. It is
intended to show some strength to the industry that Sinclair is
not dead, and the mere fact that we can get this Organization
together will prove that we can stick together and grow and
prosper. Ule look at this as an enhancement to activities that
have been planned on. Hopefully a Northamerican Calendar of
events could be established to help co-ordinate any future plans
and events. It is not designed to take anything away from
anyone.
UJHAT TO DO
lUe need the support of EVERY SINGLE SINCLAIR USER I Whether
you reside in Canada, the U.S., or Mexico, or for that matter
anywhere, we need to know how you feel and what you want in this
Organization. This is your opportunity to be heard ... your
comments, critisms, complaints, or praises. What we have here is
nothing more than an idea. Nothing at this time is set in
concrete. We are more than open to suggestions. To make it work,
these ideas of yours have to be forwarded immediately. We are
putting on a time limit until June 30, 1S8B. If there is no
support, then we will not proceed further. If there is imput, we
will update on a monthly basis to whoever will put the
information in print. So, lets hear from you soonM
TEMPORARY CONTACT FOR INFORMATION :
MEL NATHANSON
7515 ARBORDALE DRIVE ' '^^
PORT RICHEY, FLORIDA 34668 WO HKKGR^ lOOODS CT
UN 30
C813) 863 - 555B OCLro^^,^"- 32765
605) 3^0- ZH(>S
* SUPPORTING PUBLICATIONS ** Time Designs, Syncware News,
TS-2068 UP-DATE, Quantum Levels.
" Please show your support with INTEREST CARD for Mail List.
l b 2008 UP UATE
the user's NEWS
^lifeiii^i I— 1^1. y. I fill u I JUitMUki^iyMr
xe—aooe up— date
X&Xr STRATI^ORD AVB.
X^ANAMA CITY. I»3L 32404
/
Jut To
lt>tU